[英]node.js async.each() callback was called before all iteration was finished
有人可以解释一下我如何仅在所有迭代完成后才能进行回调吗? 我为此使用了async.each函数:
async.each(products, function (product, callback) {
fs.appendFile('ParseLog.txt', "PRODUCT name: " + product.name, function (err) {
console.log("iterate");
callback();
});
}, function (err) {
console.log("ALL FINISH");
});
所以我的输入看起来像:
ALL FINISH
iterate
iterate
iterate
...
但我希望“ ALL FINISH”消息将在所有迭代之后打印。 编辑1:对不起,但似乎麻烦在于if(i > 10) return callback({ data: 'hi'}); // stop
if(i > 10) return callback({ data: 'hi'}); // stop
在每个循环的开始处if(i > 10) return callback({ data: 'hi'}); // stop
。 我只想在11次迭代后退出,但令我感到奇怪的是为什么它首先会回调。
async.each(products, function (product, callback) {
var i = products.indexOf(product);
if(i > 10) return callback({ data: 'hi'}); // stop
fs.appendFile('ParseLog.txt', "PRODUCT name: " + product.name, function (err) {
console.log("iterate");
callback();
});
..
在将产品传递给async.each
之前 ,应限制要处理的产品数量:
async.each(products.slice(0, 11), function (product, callback) {
fs.appendFile('ParseLog.txt', "PRODUCT name: " + product.name, function (err) {
console.log("iterate");
callback(err); // make sure to pass `err`!
});
}, function(err) {
if (err) console.log('ERROR', err);
console.log("ALL FINISH");
});
同样,当您调用延续回调时,第一个参数为“保留”,表示发生了错误。 在您的示例中,您正在使用它传递一个对象( { data: 'hi' }
),该对象将使async
认为发生了错误(除非您打算这么做)。 适当的成语是这样的:
callback(null, { data: 'hi' })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.