CNode

求大神解答 : for loop 還沒執行所有項目就退出 loop

问答
NNitroXenon发布于11 年前最后回复11 年前12 回复4277 浏览0 收藏

各位大神好 我是 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)

J
JacksonTian#1·11 年前

先去了解下异步吧。

N
NitroXenon#2·11 年前
引用 JacksonTian先去了解下异步吧。

@JacksonTian 是 async module?

J
JacksonTian#3·11 年前
引用 NitroXenon@JacksonTian 是 async module?

@NitroXenon 不是async模块,而是node的异步的原理。

N
NitroXenon#5·11 年前
引用 JacksonTian@NitroXenon 不是async模块,而是node的异步的原理。

@JacksonTian 那解決方法是不是在for loop裏面回傳callback?

D
dayuoba#6·11 年前

for是同步逻辑,不要这样处理异步io,你在callback中用到的i都是i的最大值,可以自己写一个递归调用,在callback里调用

function asyncIO(index) {
	if (index>3) return;
	io('file'+index, function() {
		index++;
		asyncIO(index);
	});
}

顺便帮忙推荐一下《深入浅出nodejs》

D
DavidCai1993#7·11 年前
引用 NitroXenon@JacksonTian 那解決方法是不是在for loop裏面回傳callback?

@NitroXenon 这样的话,callback里取到的都是for loop结束时i的值了,不用引入其他模块的话,可以在作用域内维护一个计数器,for loop里的callback里取计数器的值,每次再把计数器+1

N
NitroXenon#8·11 年前

受教了 感覺在node用for很麻煩:/

D
DavidCai1993#9·11 年前
引用 NitroXenon受教了 感覺在node用for很麻煩:/

@NitroXenon 是异步调用在for loop中很麻烦。想让触发多次异步调用的话,还是多用流程控制模块如async吧 :)

D
DavidCai1993#12·11 年前
参与回复
登录后即可参与回复。登录