Node-04.异步编程之async和await

109 阅读1分钟

1.async和promise的对比

  • async functionPrimise的语法糖封装
  • 异步编程的终极方案-以同步的方式写异步

🚀图例1:

🚀图例2:

🚀图例3-reslove的情况:

  • 对比可知,async直接return一个结果,相当于在promise中直接resolve一个结果

🚀图例4-reject的情况:

  • async抛出错误时,和promisereject的结果是一样滴

2.await:

🚀没有使用await的情况:

(function(){
  const result = async function(){
    var content =  new Promise((resolve,reject)=>{
      setTimeout(()=>{
        resolve('我在return之前被打印了');
      },500)
    })
    console.log(content);
    return '呀吼';
  }();
  setTimeout(function(){
    console.log(result);
  },800)
})()

结果如下图:

🚀使用await后的情况:

(function(){
  const result = async function(){
    var content = await new Promise((resolve,reject)=>{
      setTimeout(()=>{
        resolve('我在return之前被打印了');
      },500)
    })
    console.log(content);
    return '呀吼';
  }();
  setTimeout(function(){
    console.log(result);
  },800)
})()

结果如下图:

  • 添加await后打印的content中有内容了我在return之前被打印了(await之后是等待了500毫秒之后才往下面走😱)

再来看下await处理错误的情况:

await的特点:

  • await关键字可以暂停 async function的执行
  • await关键字可以以同步的写法获取Primise的执行结果
  • try-catch可以获取await所得到的结果