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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

setTimeout和setImmediate以及process.nextTick的区别

發布時間:2024/1/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 setTimeout和setImmediate以及process.nextTick的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《第二屆阿里巴巴前端練習生計劃線上筆試》考試

setTimeout和setImmediate以及process.nextTick的區別

SetTimeOut

setTimeout和setInterval函數執行順序相似,需要注意的是,setTimeout()只是將事件插入了"任務隊列",必須等到執行棧執行完,主線程才會去執行它指定的回調函數。要是當前代碼耗時很長(如有for循環),有可能要等很久,所以并沒有辦法保證,回調函數一定會在setTimeout()指定的時間執行。

setTimeout(function(){console.log('0')},0); //意思是回調函數加入事件隊列的隊尾,主線程和事件隊列的函數執行完成之后立即執行定時器的回調函數,如果定時器的定時是相同的,就按定時器回調函數的先后順序來執行。 console.log(1); setTimeout(function(){console.log(2);},1000); setTimeout(function(){console.log(4);},1000); console.log(3); //1 3 0 2 4

SetImmediate

setImmediate()是將事件插入到事件隊列尾部,主線程和事件隊列的函數執行完成之后立即執行setImmediate指定的回調函數,和setTimeout(fn,0)的效果差不多,但是當他們同時在同一個事件循環中時,執行順序是不定的。
結論:
在 文件I/O、網絡I/O 中,setImmediate()會先于setTimeout(fn,0)
其他一般情況下,setTimeout(fn,0)會先于setImmediate()

執行結果

process.nextTick()

process.nextTick()方法可以在當前"執行棧"的尾部待下一次Event Loop(主線程讀取"任務隊列")之前觸發process指定的回調函數。也就是說,它指定的任務總是發生在所有異步任務之前,當前主線程的末尾。(nextTick雖然也會異步執行,但是不會給其他io事件執行的任何機會)

process.nextTick(function A() {console.log(1);process.nextTick(function B(){console.log(2);}); });setTimeout(function C() {console.log(3'); }, 0) // 1 // 2 // 3

執行順序:
主線程>微任務>宏任務

總結

以上是生活随笔為你收集整理的setTimeout和setImmediate以及process.nextTick的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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