我目前正在尝试了解 MongoDB 和 javascript 中的异步函数,过去几个小时一直在搞乱,但没有运气。
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 A
查询工作正常,如果我执行 console.log(res),我会得到具有正确结果的对象,因此这不是问题。
为什么程序会忽略前面的等待并最终打印并返回 undefined?
最佳答案
当您将db.findOne
与回调一起使用时,您没有使用可以await
的Promise。你应该像这样等待:
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;
}
关于javascript - Async/await 未按预期顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51810248/