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

    • return的只要不是promise对象,那么返回的则是成功的promise对象

      async function test() {
          return 1
      }
      test().then(res => {
          console.log(res);
      })
      
    • async函数返回的是error,那么返回的是失败的Promise

      async function test() {
          throw new Error('err');
      }
      test().then(res => {
          console.log(res)    
      }, reason => {
          console.log(reason) // err
      })
      
    • async函数返回的是Promise对象,则根据这个对象的状态来决定Promise状态

      async function test() {
          return Promise.reject('reject');
      }
      test().then(res => {
          console.log(res); // reject
      })
      
  • Promise.then成功的情况下对应await

    async function test() {
        const p = Promsie.resolve(3);
        p.then(data => {
            console.log(data); // 3
        })
        const data = await p;
        console.lgo(data); // 3
    }
    test();
    
  • Promise.catch异常的情况对应async中的try catch

    async function test() {
        const p = Promise.reject(6);
    
        try {
            const data = await p;
            console.log('成功的data', data)
        } catch(error) {
            console.log('错误原因:', error); // 错误原因6
        }
    }
    test()
  • async/await 更符合同步语义,容易理解,使得异步代码更想是同步代码

  • async/await是基于promise实现的

  • async/await是生成器的语法糖,拥有内置执行器,不需要额外的调用,直接会自动调用并返回一个promise对象