首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置async await函数顺序

设置async await函数顺序
EN

Stack Overflow用户
提问于 2020-01-19 15:57:26
回答 3查看 168关注 0票数 1

我有两个函数,它们都是异步的。我想要确保一个接一个地执行下面的代码在异步中

代码语言:javascript
复制
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功能正在工作(重新调用用户)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-19 16:35:06

我假设所有这些代码行也都在一个异步函数中。

您的问题是find返回一个用户数组,而不是单个用户,更改

代码语言:javascript
复制
const user= await User.find({
      _id: req.user.id
    });

至:

代码语言:javascript
复制
const user= await User.findOne({
      _id: req.user.id
    });

如果代码不在函数中,而在主文件中,那么你将不得不使用回调。

票数 2
EN

Stack Overflow用户

发布于 2020-01-19 16:07:06

您需要使用回调。如下所示:

代码语言:javascript
复制
User.find({
      _id: req.user.id
    }, function (user) {
    printUser(user.userName, user.email); 
});
票数 0
EN

Stack Overflow用户

发布于 2020-01-19 18:24:07

假设您是mongoose,它不返回查询函数的promise (阅读此处- https://mongoosejs.com/docs/promises.html#queries-are-not-promises)。您可以使用.then.exec,它将返回适当的promise。就像这样

代码语言:javascript
复制
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};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59808234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档