真正意义上去解决异步回调的问题,同步流程表达异步操作,本质上async 是 Generator的语法糖,async和await, 用于优化Generator的使用, 无需再主动调用next。
- 不需要像Generator去调用next方法,遇到await等待,当前的异步操作完成就往下执行
- 被async修饰的函数,是一个异步函数 返回的总是Promise对象,可以用then方法进行下一步操作
- async取代Generator函数的星号*,await取代Generator的yield
async function foo(){
await 异步操作;
await 异步操作;
}
foo(); // 注意: async函数, 总会返回一个Promise对象
示例:定义异步操作时setTimeout来配合Promise+async+await使用
1.定义Promise函数执行异步操作
function timeout(seconds) {
// 延迟方法
return new Promise(resolve => {
setTimeout(resolve, seconds * 1000);
})
}
2.使用async和await
async function asyncPrint(value) {
console.log('函数执行---');
await timeout(2);
console.log('2秒后执行?');
await timeout(4);
console.log("4秒后执行?");
console.log(value);
}
asyncPrint('hello async');
console.log("主线程代码----------");
当await 后面的表达式, 返回的是reject/报错信息, 则await不会继续向下执行
如果await后面是一个promise对象, 会直接接受resolve传回来的结果
await 需要配合 Promise 对象来使用