执行 async 函数,返回的都是 Promise 对象

  1. async function test1() {
  2. return 1;
  3. }
  4. async function test2() {
  5. return Promise.reslove(2);
  6. }
  7. const result1 = test1();
  8. const result2 = test2();
  9. console.log('resutl1', result1);
  10. console.log('result2', result2);

image.png

result1 是一个 Promise 对象,result2 也是一个 Promise 对象。得出了规律:
当一个异步函数返回一个普通值时,会被封装为一个 Promise 对象后再返回;
如果异步函数返回的是 Promise 对象,就会返回这个 Promise 对象。

Promise.then 成功时情况 对应 await

  1. async function test3() {
  2. const p3 = Promise.resolve(3);
  3. p3.then(data => {
  4. console.log('data1', data)
  5. })
  6. const data = await p3;
  7. console.log('data2', data);
  8. }
  9. test3();
  10. // data1 p3
  11. // data2 p3
  1. async function test4() {
  2. const data = await 4; // 相当于 Promise.resolve(4);
  3. console.log('data', data);
  4. }
  5. test4(); // data 4
  1. async function test1() {
  2. return 1;
  3. }
  4. async function test5() {
  5. const data = await test1(); // test1 是异步函数,返回的是 Promise 对象,Promise结果为 1。
  6. // 然后 await 又相当于 Promise.resolve(1)
  7. console.log('data', data);
  8. }
  9. test5(); // data 1

这三种是在 await 中常见的写法

  • await 直接跟一个 Promise 对象
  • await 直接跟一个普通值
  • await 直接跟一个异步的函数

    Promise.catch 异常的情况对应 try … catch

    ```javascript async function test6() { const p6 = Promise.reject(6);

    const data = await p6; console.log(‘data6’, data); }

test6();

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/1753568/1619768786172-a7e9dbe1-70ee-4205-a8a9-4640e5df60e5.png#align=left&display=inline&height=25&margin=%5Bobject%20Object%5D&name=image.png&originHeight=25&originWidth=210&size=1447&status=done&style=none&width=210)<br />确实打印出 6,但是异常是没有被捕获到。<br />使用 try ... catch 来捕获异常。
  2. ```javascript
  3. async function test6() {
  4. const p6 = Promise.reject(6);
  5. try {
  6. const data = await p6;
  7. console.log('data6', data);
  8. } catch (e) {
  9. console.error('e', e);
  10. }
  11. }
  12. test6();

image.png 这时异常就可以被捕获了。