在上一节已经讲了Generator函数(juejin.im/post/5cff72…),如果没有认真读,请再次打开看一下。
理解了Generator函数,async和await就很简单了:就是把Generator的星号*换成async,把yield换成await。
注意
- async返回一个Promise对象,可以使用then方法;await用于等待一个Promise对象。
- await返回Promise对象的处理结果;如果等待的不是Promise对象,则返回该值本身。
- 如果await处理的对象是Promise,则等待Promise对象resolve,再恢复async函数的执行。也就是说async函数自带执行器,而无需像yield函数那样使用next()调用。
示例:
async function asyncFn(){
await setTimeout(console.log(1),4000);
await setTimeout(console.log(2),3000);
await setTimeout(console.log(3),2000);
return 4;
}
asyncFn().then(v=>{
console.log(v)
})
复制代码
执行结果:
1
2
3
4
复制代码
使用场景
-
实现一个程序停顿
async function sleep(interval){
await new Promise(resolve=>{
setTimeout(resolve,interval);
});
}
async function tick(){
for(let i=0;i<5;i++){
console.log(i);
await sleep(1000);
}
}
tick();
复制代码
执行结果(每隔一秒执行一次console.log):
0
1
2
3
4
复制代码