【一分钟JavaScript】async和 await

216 阅读1分钟

在上一节已经讲了Generator函数(juejin.cn/post/684490…),如果没有认真读,请再次打开看一下。

理解了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