各位大神好 我是 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
先去了解下异步吧。
@JacksonTian 是 async module?
@NitroXenon 不是async模块,而是node的异步的原理。
@JacksonTian 好 我google一下
@JacksonTian 那解決方法是不是在for loop裏面回傳callback?
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
受教了 感覺在node用for很麻煩:/
@NitroXenon 是异步调用在for loop中很麻烦。想让触发多次异步调用的话,还是多用流程控制模块如async吧 :)
@DavidCai1993 感謝大神建議~ 正打算用async :)
@DavidCai1993 用async的each貌似可以xD
@NitroXenon 必须可以~