async/await

同步的形式的代码,拥有异步功能
  • await
    • 用于等待一个异步方法执行完成
    • 只能用在async里面,用在普通函数里面会报错
    • await放在Promise调用以前,强制后面的代码等待,直到Promise对象resolve,获得resolve的值做为await表达式结果,代码才会继续往下执行
  • async
    • 用于声明一个异步函数
    • 自动将常规函数转成Promise,返回Promise对象
    • 异步函数内能够使用await
    • 只有async内函数执行完成之后才会执行then的回调函数
  • 错误处理
    • async函数里,不管是Promise reject的数据仍是逻辑报错,都会被默默吞掉,因此最好把await放入try{}catch{}中。catch可以捕捉到Promise对象rejected的数据或者抛出的异常
    • 或者直接使用cach

asyncPrint(1000).catch(err => {console.log(err); // 从这里捕捉到错误})复制代码


解决的问题
  • 回调多层嵌套
  • 多个await命令
    • 若是存在依赖关系,能够一个一写(后一个要等前一个执行完成才执行)

async function exc1 () {console.log('exc1 start:',Date.now())let res1 = await test1();let res2 = await test2(); // 不依赖 res1 的值console.log('exc1 end:', Date.now())}复制代码

  • 若是不错在依赖关系,能够使用Promise.all()让它们同时触发(能够加快执行时速度)

let [res1, res2] = await Promise.all([test1(), test2()])复制代码
相关文章
相关标签/搜索