所以我在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可能会在两个异步任务完成之前发生,因此会破坏我的应用程序。我该怎么做呢?
答案 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){
//
});