迭代器函数内完成的所有任务的节点,异步和回调

时间:2013-12-05 06:21:08

标签: node.js mongodb asynchronous

所以我在async.map集合中执行任务,迭代器函数在对异步任务收集的所有数据执行任务之前执行多个异步任务。

这个的快速伪示例如下:

var accts=//array of accounts fechted from mongodb
async.map(accts,function(acct,callback){
   var likes=0;
   http.get(acct.facebook,function(err,resp){/*add fan count to likes*/});
   http.get(acct.twitter,function(err,resp){/*add followers to likes*/});
   //mongoose Model named artist
   artist.update({_id:acct._id},{fans:likes},function(err,acctsUpdate){});
}

我的困惑在于,更新mongodb可能会在两个异步任务完成之前发生,因此会破坏我的应用程序。我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

我使用async.waterfall和async.map做了类似的事情。希望这有帮助

async.waterfall([

  function(callback){
    request.get('/api/fancy/', function(err, r, body) {
      if (err) return callback(err);
      callback(null, data);
    });

  },

  function(accts, callback){
    async.map(accts, _insertAcct, function(err, results){
      if (err) return done(err);
      done(null, results);
    });


    function _insertAcct(acct, _cb){
      if (!acct)
        return _cb(new Error('No acct data'));

      // save the acct to the db, using mongoskin
      db.collection('acct').save(audit, {upsert: true}, function(err, result){;
        if (err) return _cb(err);
        _cb(null, result)
      });
    }

  }
], function(err, results){
  // 
});