Individual Share Space

Promise面试题

|

做一道面试题,分析输出结果:

async function async1() {
	console.log("async1 start");
	await async2();
	console.log("async1 end");
}

async function async2() {
	console.log("async2");
}

console.log("script start");

setTimeout(function() {
	console.log("setTimeout");
}, 0);

async1();

new Promise(function(resolve) {
	console.log("promise1");
	resolve();
}).then(function() {
	console.log("promise2");
});

console.log("script end");

输出的结果如下:

分析过程:
先执行同步脚本,打印”script start”,setTimeout()是宏任务,放入宏任务队列,待下一轮Event Loop执行,调用async1():打印”async1 start”,遇到await,阻塞进程执行async2(),打印”async2”,await后面的语句相当于promise().then()中的回调函数,console.log(“async1 end”)放入微任务队列,执行下面的new Promise(),打印”promise1”,后面then()中放入微任务队列,继续执行同步脚本,打印”script end”,同步脚本执行完毕,优先依次执行微任务队列中的所有任务,然后再执行一次宏任务队列中的一个任务,所以依次打印”async1 end”→”promise2”→”setTimeout”

Comments