[英]async.each/forEachOf entering next iteration without calling callback
我正在尝试使用async
来迭代异步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()
像我上面那样注释掉,我仍然看到索引打印 5次。为什么它不会在第一次迭代时停止?如果cb
不这样做,我如何确保 readdir 将在下一次迭代之前完成?如果不是这个, cb
应该做什么?(我也有这个使用async.each
效果相同。我应该使用原生forEach
吗?
这就是异步过程的全部意义所在,在触发下一个请求之前,您无需等待请求完成。 您触发所有请求,它们将一一得到解决,一旦线程空闲(当然,请求已完成),每个请求都会调用它的回调。
也许您正在寻找承诺方法,您可以在其中链接您的承诺,以便当一个承诺得到解决时,下一个请求将被触发并创建一个新的承诺,多余地,您将能够链接您的第三个请求,并且很快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.