关于async parallel的问题
发布于 11 年前 作者 asfman 5549 次预览 最后一次回复是 11 年前 来自 问答
现在我有一个数组,包含一组id, 然后用mongoose去查询更新数据 var ids = [1,2,3,4,5]; var successLen = 0; ids.forEach(function(id) { merchandiseModel.findByIdAndUpdate(id, { $inc: { order_num: 2 } }, function(err, numberAffected, rawResponse) {
if(err){
console.error(err.message);
return;
}
if(numberAffected == 1)
successLen++;
});
} 用async如何去获取最后更新的成功数successLen?
7 回复
這樣寫會不會更簡單些:
參考討論看看。 :)
多谢,不过,你上面的有点问题,如果if(err)满足条件 callback(err),这样会导致立马执行最后一个函数,接下来的id不会再执行了. Model.update的话,如果是一个很大的数组,然后update的值是各不相同的,这个怎么写?比如数据: data = [{id: 1, num: 123}, {id:2, num: 321}…] 现在根据data数组的id去查找数据,找到后更新num,如何根据data写conditions,update?
如果不要 break loop 那就是用
async.each了:丟一個
successLen在外部我覺得這樣寫好醜,不曉得有沒有更漂亮的寫法。Model.update依不同 id 寫入不同 data 應該沒有辦法用一條簡單的條件句,可能一定得要用 loop 完成。async好像只要调用callback(err)就会立刻中断, 最后我还是用你的async.inject处理的,不调用callback(err)就好 if(err) callback(null, successLen)
@asfman
async.each碰到callback(err)不會中斷吧?async.each最後的 callback 有兩種情況會被觸發:callback(err)有傳入值進去值得注意的是,當發生 err 時第二個情況不會執行。示意:
@chinghanho each果然会都执行一遍,我看到文档里的 >the main callback (for the each function) is immediately called with the error. 以为执行了main callback就表示结束了…,不过要统计成功的数目,还是用inject优雅点
@chinghanho 赞答案 @asfman 确实用 inject 更符合函数式编程的思想。但代码上来说的话,.each 应该优雅点吧?多个 count 变量而已。