有人可以解释一下我如何仅在所有迭代完成后才能进行回调吗?我为此使用了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
每个循环的开始。我只想在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' })
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句