Javascript 设置异步等待函数顺序
我有两个函数都是异步的。 我想确保一个接一个地执行 下面的代码在async中Javascript 设置异步等待函数顺序,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有两个函数都是异步的。 我想确保一个接一个地执行 下面的代码在async中 const user= await User.find({ _id: req.user.id }); const userName= `my user name is ${user.userName}`; const email= `my email is ${user.email}`; const {response} = await printUser({userName,email};
const user= await User.find({
_id: req.user.id
});
const userName= `my user name is ${user.userName}`;
const email= `my email is ${user.email}`;
const {response} = await printUser({userName,email};
问题是printUser函数是在im找到用户之前执行的
因此用户名和电子邮件的值是未定义的
注意:以下代码在express router中,查找功能正在工作(返回用户)您需要使用回调。如下所示:
User.find({
_id: req.user.id
}, function (user) {
printUser(user.userName, user.email);
});
我假设所有这些代码行也都在异步函数中 您的问题是
find
返回一个用户数组,而不是单个用户,change
const user= await User.find({
_id: req.user.id
});
致:
如果代码不在函数中,而是在主文件中,那么您将不得不使用回调。假设您是mongoose,它不会返回查询函数的承诺(请阅读此处-)。您可以使用
.then
或使用.exec
返回正确的承诺。差不多
const user = await (User.find({
_id: req.user.id
})).exec();
const userName= `my user name is ${user.userName}`;
const email= `my email is ${user.email}`;
const {response} = await printUser({userName,email};
您是否检查了
find
函数是否返回承诺?如果它只返回一个承诺,那么wait将等待find命令完全执行,并返回一个用户(您期望的)`user.find`必须返回承诺您检查了吗?
const user = await (User.find({
_id: req.user.id
})).exec();
const userName= `my user name is ${user.userName}`;
const email= `my email is ${user.email}`;
const {response} = await printUser({userName,email};