日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面试题--promise和setTimeout的输出顺序

發布時間:2024/1/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试题--promise和setTimeout的输出顺序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面試題–promise和setTimeout的輸出順序

下面一段代碼是在網上看到的一段關于promise和setTimeout的輸出順序的代碼,下面做一下解答,有興趣的百度自行了解js的執行機制(包括宏任務和微任務,這里就不在多說):

1、new promise事件只要建立,里面的代碼會立即執行;
2、promise.then()和process.nextTick()的代碼會在本輪"事件循環"結束時執行;
3、setTimeoutd(fn, 0)的代碼會在下一輪"事件循環"開始時執行;
4、最后執行setTimeout(fn,1000)的代碼。

setTimeout(function () {var np =new Promise(function (resolve,reject) {console.log(1)resolve()})np.then(_=>{console.log(2)})console.log(3) },1000)var pro = new Promise((resolve, reject) => {console.log(5)resolve() }).then(_=>{setTimeout(function () {console.log(6)},0)return 7; }).then(n=>{console.log(n) }) console.log(4) //執行結果 5 4 7 6 1 3 2
  • 首先執行代碼遇到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的输出顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。