我现在有了以下代码:
exports.listByUser = function(req, res) {
Attack.find({user: req.user._id}, function(err, attacks) {
if(err)
return next(err);
for(var i in attacks) {
attacks[i].evaluateFight();
}
res.json(attacks);
});
};主要问题是attacks[i].evaluateFight()是异步调用的,我想转换它以确保完成[i-1]迭代.最后打电话给res.json(attacks)。我认为,这可以用异步来完成,但我不知道如何做到:(类似这样的东西应该能工作,但我如何调用attacks.method?)
async.eachSeries(attacks, function (callback) {
//something??
callback();
}, function (err) {
if (err) { throw err; }
res.json(attacks);
});发布于 2015-11-21 12:21:16
您可以利用async whilst方法调用来实现相同的调用。但是,我有一个关于evaluateFight回调的问题,因为如果它是异步执行的,那么必须有一些与它相关联的回调,如果前面的调用成功了,就会通知它。
假设evaluateFight在完成时返回回调,则示例代码可以如下所示-
exports.listByUser = function(req, res) {
Attack.find({user: req.user._id}, function(err, attacks) {
if(err)
return next(err);
var attacksLength = attacks.length;
var count = 0;
async.whilst(function () {
return count < attacksLength;
},
function (callback) {
attacks[count].evaluateFight(function(err, result){
count++;
callback();
}); // assuming it returns a callback on success
},
function (err) {
// all the iterations have been successfully called
// return the response
res.json(attacks);
});
};https://stackoverflow.com/questions/33842663
复制相似问题