首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Mongoose方法实现异步

如何用Mongoose方法实现异步
EN

Stack Overflow用户
提问于 2015-11-21 11:15:23
回答 1查看 143关注 0票数 0

我现在有了以下代码:

代码语言:javascript
复制
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?)

代码语言:javascript
复制
async.eachSeries(attacks, function (callback) {
  //something??
  callback();
}, function (err) {
  if (err) { throw err; }
  res.json(attacks);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-21 12:21:16

您可以利用async whilst方法调用来实现相同的调用。但是,我有一个关于evaluateFight回调的问题,因为如果它是异步执行的,那么必须有一些与它相关联的回调,如果前面的调用成功了,就会通知它。

假设evaluateFight在完成时返回回调,则示例代码可以如下所示-

代码语言:javascript
复制
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);
     });

};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33842663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档