async.each / forEachOf在不调用回调的情况下进入下一次迭代

时间:2015-10-23 17:29:40

标签: javascript node.js asynchronous

我尝试使用waterfall迭代异步async.waterfall([ function(callback){ async.forEachOf(waterfallObj.sizeDirs, function(sizeDir, index, cb){ //get image files fs.readdir(path.join(__dirname, sizeDir), function(err, files){ tempFiles = files; console.log(index); //0 1 2 3 4 //cb(); }); }); callback(null); }, /*more functions*/ ]); 函数数组中的图像目录。

forEachOf

我的想法是,我不想在readdir循环中进行下一次迭代,直到forEachOf完成读取文件。根据我的理解,waterfall将不会进入其循环的下一个循环,直到调用其回调(就像异步seriescb()中的每个函数一样。但即使cb也是如此如上所述,我仍然看到索引打印了5次。为什么它不会在第一次迭代时停止?如果cb不执行此操作,如何确保readdir在下一次迭代之前完成?如果不是async.each应该做什么呢?(我使用forEach也有同样的效果。我应该使用原生的Dim blah as String = webService.theQ(...) ' Print out the value of blah or inspect in debugger... 吗?

1 个答案:

答案 0 :(得分:2)

这是异步过程的重点,你不必等待一个请求完成,然后再触发下一个请求。你解雇所有请求,他们将逐个解决,一旦线程空闲,他们每个人都会调用它的回调(当然,请求已经完成)。

也许您正在寻找承诺方法,您可以在其中链接您的承诺,以便当一个承诺得到解决时,下一个请求将被触发并创建一个新承诺,多余地,您将能够链接您的第三个请求,等等。