Javascript 设置异步等待函数顺序

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};

我有两个函数都是异步的。 我想确保一个接一个地执行 下面的代码在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};
问题是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};