8. Async

1. 代码更加简洁

  1. // 例子 8-1
  2.  
  3. // good
  4. function fetch() {
  5. return (
  6. fetchData()
  7. .then(() => {
  8. return "done"
  9. });
  10. )
  11. }
  12.  
  13. // better
  14. async function fetch() {
  15. await fetchData()
  16. return "done"
  17. };
  1. // 例子 8-2
  2.  
  3. // good
  4. function fetch() {
  5. return fetchData()
  6. .then(data => {
  7. if (data.moreData) {
  8. return fetchAnotherData(data)
  9. .then(moreData => {
  10. return moreData
  11. })
  12. } else {
  13. return data
  14. }
  15. });
  16. }
  17.  
  18. // better
  19. async function fetch() {
  20. const data = await fetchData()
  21. if (data.moreData) {
  22. const moreData = await fetchAnotherData(data);
  23. return moreData
  24. } else {
  25. return data
  26. }
  27. };
  1. // 例子 8-3
  2.  
  3. // good
  4. function fetch() {
  5. return (
  6. fetchData()
  7. .then(value1 => {
  8. return fetchMoreData(value1)
  9. })
  10. .then(value2 => {
  11. return fetchMoreData2(value2)
  12. })
  13. )
  14. }
  15.  
  16. // better
  17. async function fetch() {
  18. const value1 = await fetchData()
  19. const value2 = await fetchMoreData(value1)
  20. return fetchMoreData2(value2)
  21. };

2. 错误处理

  1. // 例子 8-4
  2.  
  3. // good
  4. function fetch() {
  5. try {
  6. fetchData()
  7. .then(result => {
  8. const data = JSON.parse(result)
  9. })
  10. .catch((err) => {
  11. console.log(err)
  12. })
  13. } catch (err) {
  14. console.log(err)
  15. }
  16. }
  17.  
  18. // better
  19. async function fetch() {
  20. try {
  21. const data = JSON.parse(await fetchData())
  22. } catch (err) {
  23. console.log(err)
  24. }
  25. };

3. "async 地狱"

  1. // 例子 8-5
  2.  
  3. // bad
  4. (async () => {
  5. const getList = await getList();
  6. const getAnotherList = await getAnotherList();
  7. })();
  8.  
  9. // good
  10. (async () => {
  11. const listPromise = getList();
  12. const anotherListPromise = getAnotherList();
  13. await listPromise;
  14. await anotherListPromise;
  15. })();
  16.  
  17. // good
  18. (async () => {
  19. Promise.all([getList(), getAnotherList()]).then(...);
  20. })();