繁体   English   中英

Node.Js异步用法

[英]Node.Js Async usage

我的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()
        })

    })
})
}

看你的代码, 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();
    })
  })
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM