虽互不曾谋面,但希望能和您成为笔尖下的朋友
以读书,技术,生活为主,偶尔撒点鸡汤
不作,不敷衍,意在真诚吐露,用心分享
点击左上方,可关注本刊
标星公众号(ID:itclanCoder)
如果不知道如何操作
点击这里,标星不迷路
━━━━━━
Promise 执行问题
写出下面一段程序的输出的结果
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
公众号(ID:itclanCoder)
码能让您早脱菜籍,文能让您洗净铅华
可能您还想看更多:
CSS篇-面试题4-外边距问题
Js篇-面试题1-有关变量-词法块级作用域