嗨我有接受两个数组和回调函数的函数,我使用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在我的第一次迭代完成后立即被触发。
谢谢和问候。
答案 0 :(得分:2)
在第一次迭代后触发作为参数接收的回调(finalCallback())的原因是因为使用非null值调用asyc.each()的回调(cb)。当使用非null值调用它时,会调用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()