面试题--promise和setTimeout的输出顺序
生活随笔
收集整理的這篇文章主要介紹了
面试题--promise和setTimeout的输出顺序
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
面試題–promise和setTimeout的輸出順序
下面一段代碼是在網(wǎng)上看到的一段關(guān)于promise和setTimeout的輸出順序的代碼,下面做一下解答,有興趣的百度自行了解js的執(zhí)行機(jī)制(包括宏任務(wù)和微任務(wù),這里就不在多說(shuō)):
1、new promise事件只要建立,里面的代碼會(huì)立即執(zhí)行;
2、promise.then()和process.nextTick()的代碼會(huì)在本輪"事件循環(huán)"結(jié)束時(shí)執(zhí)行;
3、setTimeoutd(fn, 0)的代碼會(huì)在下一輪"事件循環(huán)"開(kāi)始時(shí)執(zhí)行;
4、最后執(zhí)行setTimeout(fn,1000)的代碼。
- 首先執(zhí)行代碼遇到setTimeout(fn, 1000)將其放到消息隊(duì)列中
- 往下執(zhí)行遇到new promise()直接執(zhí)行里面的代碼第一個(gè)輸出5,遇到promise.then后將promise.then放到本次事件循環(huán)的結(jié)束
- 再往下執(zhí)行遇到console.log(4),所以第二個(gè)輸出4,本次事件循環(huán)即將結(jié)束,去取promise.then()的代碼
- 第一個(gè)promise.then()里含有setTimeout(fn, 0)應(yīng)當(dāng)將其放在下一輪事件循環(huán)的開(kāi)始
- 緊接著第二個(gè)promise.then()執(zhí)行n就是第一個(gè)promise.then()的返回值所以第三個(gè)輸出7
- 開(kāi)始第二輪事件循環(huán),首先讀取setTimeout(fn, 0),第四個(gè)輸出6
- 將消息隊(duì)列中的setTimeout(fn, 1000)取出來(lái)開(kāi)始第二輪,還是一樣的道理,緊接著輸出1,3,2
總結(jié)
以上是生活随笔為你收集整理的面试题--promise和setTimeout的输出顺序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用户自定义实现定时任务?很简单我教你实现
- 下一篇: 安装该设备时去现一个错误,系统找不到指定