我有两个函数都是异步的。 我想确保一个接一个被执行 以下代码位于异步内部
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函数 因此userName和email的值是不确定的。
注意:以下代码在快速路由器中,并且查找功能正常运行(正在重现用户)
答案 0 :(得分:2)
我假设所有这些代码行也都在异步函数中。
您的问题是find
返回一个用户数组,而不是单个用户,更改
const user= await User.find({
_id: req.user.id
});
收件人:
const user= await User.findOne({
_id: req.user.id
});
如果代码不在函数中而是在主文件中,那么是的,您将不得不使用回调。
答案 1 :(得分:0)
您需要使用回调。如下所示:
User.find({
_id: req.user.id
}, function (user) {
printUser(user.userName, user.email);
});
答案 2 :(得分:0)
假设您是猫鼬,它不会返回查询功能的承诺(请在此处阅读https://mongoosejs.com/docs/promises.html#queries-are-not-promises)。您可以使用.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};