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