嗨
我有接受两个数组和回调函数的函数,我正在使用 async.each 迭代其中一个数组(并尝试了 async.forEach 并且两者都有相同的结果),一切正常,但是我作为参数接收的回调,该回调在第一次迭代后触发第三个参数时发送。这是我的代码。
function itemLikes(instruments,likes, finalCallback){ var items = []; if(instruments.length >= 1){ async.forEach(instruments, function(instrument,cb){ if(likes){ if(likes.indexOf(instrument._id.toString()) !== -1){ instrument.liked = 1; cb(items.push(instrument)) } else{ cb(items.push(instrument)) } } else{ cb(items.push(instrument)) } }, function(err){ finalCallback(items) }) } else{ finalCallback(items) }
}
这是我从文档中了解到的,但我的 FinalCallback 在第一次迭代完成后立即触发。
感谢和问候。
最佳答案
第一次迭代后触发接收参数的回调(finalCallback())是因为asyc.each()的回调(cb)是用非空值调用的。当使用非空值调用它时,async.each() 的最终回调将被调用,然后调用您的finalCallback()。你需要做这样的事情:
if(likes){
if(likes.indexOf(instrument._id.toString()) !== -1){
instrument.liked = 1;
items.push(instrument);
cb()
} else{
items.push(instrument);
cb()
}
} else{
items.push(instrument);
cb()
}
上面的逻辑似乎可以简化如下:
if(likes && likes.indexOf(instrument._id.toString()) !== -1){
instrument.liked = 1;
}
items.push(instrument);
cb()
关于node.js - async.each/forEach 第三个参数(回调)在每个间隔后触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24772990/