同步的形式的代码,拥有异步功能
- 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()])