我试图用async
遍历异步函数数组中的图像目录。async.each/forEachOf在不调用回调的情况下进入下一个迭代
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()
注释掉了,就像我上面所说的,我仍然看到索引打印了5次。为什么在第一次迭代时不能停止?如果cb
没有这样做,我如何确保readdir在下一次迭代之前完成?cb
应该做什么,如果不是这样?(我也有同样的效果使用async.each
。我应该使用本机forEach
也许吧?
*“为什么不停止第一次迭代”*因为它不是像'async.series'那样工作的。这就是为什么有'async.forEachOfSeries'方法。 –