我尝试使用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
将不会进入其循环的下一个循环,直到调用其回调(就像异步series
或cb()
中的每个函数一样。但即使cb
也是如此如上所述,我仍然看到索引打印了5次。为什么它不会在第一次迭代时停止?如果cb
不执行此操作,如何确保readdir在下一次迭代之前完成?如果不是async.each
应该做什么呢?(我使用forEach
也有同样的效果。我应该使用原生的Dim blah as String = webService.theQ(...)
' Print out the value of blah or inspect in debugger...
吗?
答案 0 :(得分:2)
这是异步过程的重点,你不必等待一个请求完成,然后再触发下一个请求。你解雇所有请求,他们将逐个解决,一旦线程空闲,他们每个人都会调用它的回调(当然,请求已经完成)。
也许您正在寻找承诺方法,您可以在其中链接您的承诺,以便当一个承诺得到解决时,下一个请求将被触发并创建一个新承诺,多余地,您将能够链接您的第三个请求,等等。