各位大神好 我是 node 新手 最近才接觸 node 發現事件驅動十分強大… 剛剛寫了一個從服務器拿取資料的for loop lastChunk 是 3 但是最後 loop 結束後,只寫入了一個檔案 : chunk-3 其他的 chunk-1 和 chunk-2 沒有 request 到 有大神知道怎樣讓 for loop 執行所有 chunk 才會退出回圈? 求解 以下是code
for (var i = 1; i < lastChunk; i++ ) { // Start of for loop
request(server + 'getGameDataChunk/' + platform + '/' + id + '/' + i + '/token', function(err, res, body) {
if (err)
console.log(err.message);
fs.writeFile(folder + '/chunk-' + i,body,function(err){
if (err)
console.log(err.message);
// 其他操作
});
});
} // End of for loop
12 回复
for是同步逻辑,不要这样处理异步io,你在callback中用到的i都是i的最大值,可以自己写一个递归调用,在callback里调用
function asyncIO(index) {
if (index>3) return;
io('file'+index, function() {
index++;
asyncIO(index);
});
}
顺便帮忙推荐一下《深入浅出nodejs》
@NitroXenon 这样的话,callback里取到的都是for loop结束时i的值了,不用引入其他模块的话,可以在作用域内维护一个计数器,for loop里的callback里取计数器的值,每次再把计数器+1