有人可以解释我如何在所有迭代完成后才能进行回调吗?我使用了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
...
但我希望"所有结束"消息将在所有迭代后打印。
编辑1:
对不起,但似乎麻烦在每个循环开始的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();
});
..
答案 0 :(得分:4)
您应该在将传递到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' })