gpt4 book ai didi

node.js - async.each/forEach 第三个参数(回调)在每个间隔后触发

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:24 25 4
gpt4 key购买 nike


我有接受两个数组和回调函数的函数,我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com