鍍金池/ 問答/HTML/ node的nextTick和setImmediate執(zhí)行順序問題

node的nextTick和setImmediate執(zhí)行順序問題

process.nextTick(() => {
  console.log('nextTick執(zhí)行');
});

setImmediate(() => {
  console.log('setImmediate1執(zhí)行');
  process.nextTick(() => {
    console.log('強勢插入');
  });
});

setImmediate(() => {
  console.log('setImmediate2執(zhí)行');
});

這段代碼在node高版本的執(zhí)行結(jié)果是:

nextTick執(zhí)行
setImmediate1執(zhí)行
setImmediate2執(zhí)行
強勢插入

在node深入淺出這本書中說process.nextTick()的回調(diào)函數(shù)保存在一個數(shù)組中,每輪Tick會將數(shù)組中的所有回調(diào)函數(shù)全部執(zhí)行完;setImmediate()結(jié)果保存在鏈表中,每輪Tick只會執(zhí)行一個回調(diào)函數(shù),不就和上述執(zhí)行結(jié)果不一致了嗎?

回答
編輯回答
情未了

check階段發(fā)現(xiàn)有2個setImmediate的回調(diào)要執(zhí)行,執(zhí)行第一個setImmediate回調(diào)過程中產(chǎn)生了另一個nextTick,但我不管,我check階段還沒過,先執(zhí)行完我的回調(diào),等check階段完成在末尾執(zhí)行nextTick。

2017年11月14日 07:53