async.each / forEach第三个参数(callback)在每个时间间隔后触发

你好
我有接受两个数组和callback函数的函数,我正在使用async.each(并尝试async.forEach,都有相同的结果)迭代其中一个数组,一切工作正常,但我收到的callback作为参数,这是第一次迭代之后触发的第三个参数。 这是我的代码。

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())的callback被触发的原因是因为asyc.each()的callback(cb)被调用了非空值。 当用非空值调用它时,会调用async.each()的最后一个callback,然后调用你的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()