我确实有一个异步并行 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 找不到任何结果的可能性。在这种情况下,它将调用回调,并将 err
和 result
设为 null。发生这种情况时,并行运行的函数不会调用它们的回调,因此最终函数永远不会运行。在这种情况下,您要做什么取决于您,但您需要使用某些内容来调用callback
函数。
您没有得到任何结果的原因很可能是playerId和gameId是字符串,而_id默认是ObjectId。添加 var ObjectId = require('mongodb').ObjectId;
,然后将 playerId
替换为 ObjectId(playerId)
,您可能会看到结果。
关于javascript - 异步并行最终回调不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33089422/