javascript - 异步并行最终回调不会触发

标签 javascript node.js mongodb asynchronous callback

我确实有一个异步并行 block 来对 MongoDB 执行两个查询。 在函数(回调)的每个步骤中,我都有一个有效的返回结果,没有触发任何错误。我进行了调试,所有步骤都正常工作,除了最终回调未触发,并且我无法使用断点到达其条件。 有人知道会发生什么吗?

async.parallel([

// first Query
function(callback){
  this._game.findOne({'_id': gameId}, function(err, result){
    if(err){return callback(err);}
    else if(result) {
      callback(null, result);
    }
  });
},

// second Query
function(callback){
  this._player.findOne({'_id': playerId}, function(err, result){
    if(err){return callback(err);}
    else if(result) {
      callback(null, result);
    }
  });
}
],

  // Final callback to send all 2 Results -> which is not working...
  function(error, results){

    if(results){

      res.status(200);
      res.send(results);
    }
  }
);`

最佳答案

您没有处理 Mongo 找不到任何结果的可能性。在这种情况下,它将调用回调,并将 errresult 设为 null。发生这种情况时,并行运行的函数不会调用它们的回调,因此最终函数永远不会运行。在这种情况下,您要做什么取决于您,但您需要使用某些内容来调用callback函数。

您没有得到任何结果的原因很可能是playerId和gameId是字符串,而_id默认是ObjectId。添加 var ObjectId = require('mongodb').ObjectId;,然后将 playerId 替换为 ObjectId(playerId),您可能会看到结果。

关于javascript - 异步并行最终回调不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33089422/

相关文章:

javascript - jquery clone 在哪里渲染它的内容?

javascript - 滚动时固定元素

node.js - 如何断言函数被调用?

javascript - 如何使用 node-mongodb-native 连接到 Modulus.io?

mongodb - 如何将 NoSQL 与 Data Vault 2.0 建模集成?如何使用哈希键来集成NoSQL DB?

javascript - 在循环中创建对象

javascript - 如何使用 jQuery 将一个类替换为另一个类?

javascript - socket.io 在发送到特定客户端 Node JavaScript 后断开连接

javascript - 使用正则表达式比较mongodb中的车辆编号

javascript - 如何在 Meteor 中结束 session