因此,我在 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 可能会在两个异步任务完成之前发生,因此会破坏我的应用程序。我该如何去做呢?
最佳答案
我使用 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){
//
});
关于node.js - 迭代器函数内完成的所有任务的 Node 、异步和回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20392915/