Promise面试题
24 Apr 2025 | JS面试题 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