设置异步等待功能顺序

时间:2020-01-19 07:57:25

标签: javascript node.js mongodb mongoose

我有两个函数都是异步的。 我想确保一个接一个被执行 以下代码位于异步内部

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的值是不确定的。

注意:以下代码在快速路由器中,并且查找功能正常运行(正在重现用户)

3 个答案:

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