我有两个函数,它们都是异步的。我想要确保一个接一个地执行下面的代码在异步中
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};问题是在im找到用户之前执行printUser函数,因此userName和email的值是未定义的。
注意:以下代码在express路由器中,find功能正在工作(重新调用用户)
发布于 2020-01-19 16:35:06
我假设所有这些代码行也都在一个异步函数中。
您的问题是find返回一个用户数组,而不是单个用户,更改
const user= await User.find({
_id: req.user.id
});至:
const user= await User.findOne({
_id: req.user.id
});如果代码不在函数中,而在主文件中,那么你将不得不使用回调。
发布于 2020-01-19 16:07:06
您需要使用回调。如下所示:
User.find({
_id: req.user.id
}, function (user) {
printUser(user.userName, user.email);
});发布于 2020-01-19 18:24:07
假设您是mongoose,它不返回查询函数的promise (阅读此处- https://mongoosejs.com/docs/promises.html#queries-are-not-promises)。您可以使用.then或.exec,它将返回适当的promise。就像这样
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};https://stackoverflow.com/questions/59808234
复制相似问题