我正在尝试获取从执行 mongodb 查询的函数返回的值。 我的问题是该函数不返回任何内容,因为查询在返回之前尚未完成。
如果我尝试 console.log(checkChickenValue(2));例如我得到未定义的返回。相关函数如下:
function checkChickenValue(chickenid) {
MongoClient.connect(url, function(err, db) {
var cursor = db.collection('games').find({}, {
limit : 1,
fields : {
_id : 1
},
sort : {
_id : -1
}
}).toArray(function(err, docs) {
var id = docs[0]._id;
var test = db.collection('games').findOne({
_id : id
}, function(err, result) {
switch(chickenid) {
case 1:
complete(result.chicken1.value);
break;
case 2:
complete(result.chicken2.value);
break;
case 3:
complete(result.chicken3.value);
break;
case 4:
complete(result.chicken4.value);
break;
case 5:
complete(result.chicken5.value);
break;
case 6:
complete(result.chicken6.value);
break;
case 7:
complete(result.chicken7.value);
break;
case 8:
complete(result.chicken8.value);
break;
}
});
});
});
function complete (value)
{
return value;
}
};
如何让函数等待,直到调用complete()?
预先感谢您的帮助!
最佳答案
您需要通过回调返回结果。向您的函数添加一个“回调”参数,表示结果准备好时将调用的函数。
function checkChickenValue(chickenid, callback)
{
然后,当您获得结果时,通过回调返回它:
switch(chickenid) {
case 1:
callback(complete(result.chicken1.value));
然后,要使用您的函数,请执行以下操作:
checkChickenValue(2, function(result){ console.log(result); });
关于node.js 函数应该仅在 mongodb 查询完成后返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29931190/