鍍金池/ 問(wèn)答/HTML/ process.nextTick()與promise.then()

process.nextTick()與promise.then()

process.nextTick(function(){
    console.log(7);
});

new Promise(function(resolve){
    console.log(3);
    resolve();
    console.log(4);
}).then(function(){
    console.log(5);
});

process.nextTick(function(){
    console.log(8);
});

這段代碼運(yùn)行結(jié)果是3,4,7,8,5
process.nextTick和Promise都是Microtasks,為什么process.nextTick會(huì)先執(zhí)行?

回答
編輯回答
情殺

之前看過(guò)的一個(gè)帖子,分享給你。

process.nextTick 永遠(yuǎn)大于 promise.then,原因其實(shí)很簡(jiǎn)單。。。在Node中,_tickCallback在每一次執(zhí)行完TaskQueue中的一個(gè)任務(wù)后被調(diào)用,而這個(gè)_tickCallback中實(shí)質(zhì)上干了兩件事:

1.nextTickQueue中所有任務(wù)執(zhí)行掉(長(zhǎng)度最大1e4,Node版本v6.9.1)

2.第一步執(zhí)行完后執(zhí)行_runMicrotasks函數(shù),執(zhí)行microtask中的部分(promise.then注冊(cè)的回調(diào))

所以很明顯 process.nextTick > promise.then

作者:何幻
鏈接:https://www.zhihu.com/questio...
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2017年2月25日 03:35