我目前正在尝试学习Java语言中的MongoDB和异步函数,并且在过去的几个小时里一直走运不顺利。
async function getObj(name) {
var db = await mongo.connect(DBURL, {
useNewUrlParser: true
});
var dbo = db.db("testdb");
var meme;
await dbo.collection("files").findOne({
"_id": name
}, function(err, res) {
console.log(res + " a");
meme = res;
console.log(meme + " b");
});
console.log(meme + " c");
await db.close();
console.log(meme + " d");
return meme;
}
程序按以下顺序打印: C d 一种 b
如果我执行console.log(res),则该查询工作正常,可以得到具有正确结果的对象,所以这不是问题。
为什么程序会忽略之前的等待并最终打印并返回未定义的内容?
答案 0 :(得分:3)
您未使用将await
与回调一起使用时可以db.findOne
的承诺。您应该像这样等待它:
async function getObj(name) {
var db = await mongo.connect(DBURL, {
useNewUrlParser: true
});
var dbo = db.db("testdb");
var meme = await dbo.collection("files").findOne({
"_id": name
});
console.log(meme + " c");
await db.close();
console.log(meme + " d");
return meme;
}