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()