Node.js 如何用Mongoose方法实现异步

Node.js 如何用Mongoose方法实现异步,node.js,asynchronous,mongoose,Node.js,Asynchronous,Mongoose,我现在有以下代码: 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(); }

我现在有以下代码:

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);
    });
};
主要问题是
攻击[i].evaluateFight()
是异步调用的,我想对其进行转换以确保
[i-1]
迭代完成。。。最后调用
res.json(攻击)
。我想,这是可以做到的,但我不知道如何:(像这样的东西应该工作,但我如何调用
攻击。方法

async.eachSeries(attacks, function (callback) {
  //something??
  callback();
}, function (err) {
  if (err) { throw err; }
  res.json(attacks);
});

您可以利用
async
同时
方法调用来实现相同的功能。但是,我对
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);
     });

};
exports.listByUser=函数(req,res){
Attack.find({user:req.user.\u id},函数(err,attacks){
如果(错误)
返回下一个(错误);
var attacksLength=attacks.length;
var计数=0;
while(函数(){
返回计数<攻击长度;
},
函数(回调){
攻击[计数]。evaluateFight(函数(错误,结果){
计数++;
回调();
});//假设它在成功时返回回调
},
功能(err){
//所有迭代都已成功调用
//返回响应
res.json(攻击);
});
};

Hi,感谢您的快速响应,但我不知道如何返回回调?
mongoose.model('Game').findOneAndUpdate({'u-id':Game.id},{'set':something},函数(err,data){//return callback HERE};
mongoose.model('Game').findOneAndUpdate({'u-id':Game.id},{'set':something},函数(err,data){callback callback callback HERE})(err,data);//这是从async}传递的回调;
另外,您的
evaluateFight
函数应该接受回调,作为
evaluateFight(回调){mongoose.model('Game').findOneAndUpdate({'u id':Game.\u id},{'set':something},函数(err,data){callback callback(err,data);//这是从async})传递的回调;}