Nodejsのチュートリアルを読んでいますが、このコードスニペットが理解できません。説明してください。
function async(arg, callback) {
console.log('do something with \''+arg+'\', return 1 sec later');
setTimeout(function() { callback(arg * 2); }, 1000);
}
function final() { console.log('Done', results); }
var items = [ 1, 2, 3, 4, 5, 6 ];
var results = [];
var running = 0;
var limit = 2;
function launcher() {
while(running < limit && items.length > 0) {
var item = items.shift();
async(item, function(result) {
results.push(result);
running--;
if(items.length > 0) {
launcher();
} else if(running == 0) {
final();
}
});
running++;
}
}
launcher();
このコードは、run 2xを生成し、1秒間一時停止してから、items配列にitemがなくなるまで2xを再度実行します。
しかし、setTimeoutで匿名関数を削除すると:
setTimeout(callback(arg*2), 1000);
次に、コードは1秒も停止せずに実行されます。なんで?