process.nextTick()その弐
setTimeout(function() { console.log('====Timeout.===='); }, 0); var counter = 0; setImmediate(function f() { console.log('immediate. [%d]', ++counter); if(counter < 5) { setImmediate(f); } });
process.nextTick()の再帰呼び出しがNGということで、言われるままにsetImmediate()でやってみると、きっちりと望み通りに動きます。上記コードではノンストップにならないように5回ループして終わらせてますが、こちら回数制限せずとも、永遠にコンソールにインクリメントしながらダンプしてくれてました。ちなみに結果は以下です。
$ node app.js
immediate. [1]
====Timeout.====
immediate. [2]
immediate. [3]
immediate. [4]
immediate. [5]
初回のI/Oイベントが何処に入るのか気になりますが、まあ、大勢に影響無し。setImmediate()はsetTimeout(Callback,0)のシンタックスシュガーにしか見えないんだけど、なんか違うのかな?順番はsetTimeout()より先だというのは実験結果ですが。