写出下面一段程序的输出的结果
new Promise(resolve => {
console.log(1);
setTimeout(() => console.log(2),0)
Promise.resolve().then(() => console.log(3))
resolve();
}).then(() => console.log(4))
console.log(5)
答案: 1 5 3 4 2
解析:事件循环,任务队列的执行顺序,new Promise
是会立即调用,接收了一个resolve
参数,执行调用输出console.log(1)语句,遇到setTimeout
,它是一个异步宏任务,会推送到任务队列中,进入挂起状态
而promise.resove
也是一个异步微任务,仍然会推送到任务队列中,进入挂起状态,当主线程console.log(5)
执行完后,在从异步任务队列中进行执行,在同一栈中,微任务要优先于宏任务的执行,所以先执行 3
,然后 4
,最后是 2
最终执行的顺序结果是:1,5,3,4,2