我目前正在尝试学习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)中执行查询,则可以得到正确结果的对象,因此这不是问题。
为什么程序会忽略之前的等待并最终打印并返回undefined?
最佳答案
当您将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;
}