避免回调地狱
使用 async await 配合 promise是解决回调地狱的终极方法 async/await特点
1, async/await更加语义化,async 是“异步”的简写,async function 用于申明一个 function 是异步的; await,可以认为是async wait的简写, 用于等待一个异步方法执行完成;
2, async/await是一个用同步思维解决异步问题的方案(等结果出来之后,代码才会继续往下执行)
3, 可以通过多层 async function 的同步写法代替传统的callback嵌套 async function语法
1)自动将常规函数转换成Promise,返回值也是一个Promise对象
2)只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数
3)异步函数内部可以使用await await语法
await 放置在Promise调用之前,await 强制后面点代码等待,直到Promise对象resolve,得到resolve的值作为await表达式的运算结果
await只能在async函数内部使用,用在普通函数里就会报错
函数形式 function timeout(ms) { return new Promise((resolve, reject) => { setTimeout(() => {reject('error')}, ms); //reject模拟出错,返回error }); } async function asyncPrint(ms) { try { console.log('start'); await timeout(ms); //这里返回了错误 console.log('end'); //所以这句代码不会被执行了 } catch(err) { console.log(err); //这里捕捉到错误error } }