【发布时间】:2019-09-09 21:45:30
【问题描述】:
在异步函数中分配的变量没有返回预期的输出。
我目前正在编写一个 NodeJS 函数,该函数从 MongoDB 数据库中查找一个对象(该数据库运行良好)并在找到时返回一个对象。问题是包含异步函数的函数不会等到前面的函数完成。我对 JS 和 NodeJS 比较陌生,所以我可能误解了异步函数的作用。
async function findUserByEmail (userEmail) {
var mg = require('mongodb').MongoClient;
var user;
await mg.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, async function(err, db){
var dbo = db.db(myDB);
var query = { email : userEmail };
await dbo.collection("Users").findOne(query).then((result)=>{
user = result;
db.close();
});
});
return user;
}
我试图在“findOne(query)”函数中返回分配给“用户”的值,但是,返回的值始终是“未定义”。
【问题讨论】:
-
您可以使用
var user = await mg.connect....获取它,并在db.close()之后使用return await dbo.collection....和return result;。但我很好奇为什么它不能这样工作。 -
您当前的节点版本是多少?您可以尝试使用其他版本,它可能已在某些版本中修复。
-
我使用的是 6.9.0 版本。我也试过你的第一条评论,但似乎仍然存在同样的问题
-
您可以尝试升级到节点
8.16.0,例如使用包n。 (npm install -g n && n 8.16.0) -
我会试试的,谢谢。
标签: node.js async-await