Node.Js异步使用

时间:2014-12-03 19:12:51

标签: javascript node.js asynchronous

我的Process1()函数有一个数据库循环,因此Process2()Process3()调用多次。我应该在async中使用哪种功能来等待for loop

 async.waterfall([
    function(callback){
        Process1(yyy, function(){
            //process1 function has a for loop.
            callback();
        })
    },
    function(callback){
       Process2(function(){
            // so process2() is calling more than once
            callback();
        })
    }
], function (callback) {
     Process3()
});

Process1():

function Process1(yyy, pass){
user.find({}).exec(function(e, users){
    _.each(users, function(_user){
        user.findOneAndUpdate(
            {'_id' : user_id},
            {$inc : {'xxx' : yyy}},
        function(e){
            !e && pass()
        })

    })
})
}

1 个答案:

答案 0 :(得分:1)

查看您的代码,Process2肯定会被多次调用,因为lodashunderscore不会等到回调发生。它们只是实用程序方法。

要解决此类asynchronous种情况,请使用async.eachasync.eachSeries

function Process1(yyy, pass){
  user.find({}).exec(function(e, users){
    async.each(users, function(_user, next){
        user.findOneAndUpdate(
            {'_id' : user_id},
            {$inc : {'xxx' : yyy}},
        function(e){
            !e && next()
        })
    }, function(err) {
       pass();
    })
  })
}