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()より先だというのは実験結果ですが。