繁体   English   中英

在所有迭代完成之前调用了node.js async.each()回调

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM