gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:31:34 25 4
gpt4 key购买 nike

有人可以解释我如何才能在所有迭代完成后才进行回调吗?我为此使用了 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'});//在每个循环开始时停止。我只想在 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' })

关于javascript - 在所有迭代完成之前调用 node.js async.each() 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31414212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com