当前位置: 首页 > 知识库问答 >
问题:

在异步函数中使用两个wait

辛可人
2023-03-14

我试图从两个异步函数返回一个值。我正在尝试这个线程中使用的方法。在异步函数之外使用wait

然而,我总是得到一个未定义的值。

common.loggedInUserisAdmin().then((currentUser) => {
   console.log(currentUser); // This line is executed before values return from loggedInUserisAdmin function.
});

// Here is my async functions code.
async loggedInUserisAdmin() {
  (async () => {
    await 
       this.getCurrentAccount().then().then((currentUser) => {
         this.getUserDetailsByEmail(currentUser.userName).then((userData) => {
          return userData.admin;
      })
   })
 })();
},

async getCurrentAccount() {
    return await msalApp.getAccount();
},

async getUserDetailsByEmail() {
    const dataUrl = `$https://localhost:12345/User/GetUserDetails?emailAddress=${emailAddress}`
    const errorMessage = 'Error getting current user'
    return await authorisedFetch(dataUrl, errorMessage)
}

共有1个答案

白修谨
2023-03-14

我在您的代码中看到以下问题:

  • 您将异步等待语法与promise链接混淆了。
  • 从回调函数返回的值不是外部loggedInUserisAdmin方法的返回值。
  • 也不确定在异步方法中使用异步IIFE的目的是什么。

您的loggedInUserisAdmin方法可以简化如下所示:

async loggedInUserisAdmin() {
  const currentUser = await this.getCurrentAccount();
  const userData = await this.getUserDetailsByEmail(currentUser.userName);

  return userData.admin;
}

确保调用此方法的代码有一个catch块来捕获和处理此方法执行期间可能发生的任何错误。

 类似资料:
  • 我想从客户端接收一个图像,将其转换为文本,然后删除图像,一旦它被转换。我正在使用以下代码: 因此,在post方法中,我调用convert函数,然后调用remove,但remove首先执行,因此convert函数导致错误。有办法处理这个问题吗?

  • 我有一个异步函数,它在代码中的某个地方按setInterval运行。此函数定期更新一些缓存。 我还有一个不同的同步函数,它需要检索值——最好是从缓存中检索,但如果是缓存未命中,则从数据源检索(我意识到以同步方式进行IO操作是不明智的,但假设在这种情况下需要这样做)。 我的问题是,我希望同步函数能够等待异步函数中的值,但是不可能在非异步函数中使用关键字: 现在,通过将中的逻辑提取到一个新的同步函数中

  • 问题内容: 我想要实现的是Web钩子应该等待,直到我从api调用获得响应为止。PS:API正在起作用,只是机器人不等待响应到来。任何帮助将不胜感激。谢谢 问题答案: 您没有说明要在什么环境中运行,但是鉴于您的代码以及上面概述的更改,我可以使用Firebase Cloud Functions和node.js 6.14复制您的问题。 我可以通过使用包而不是来使它正常工作。顾名思义,它使用本机Promi

  • 问题内容: 我试图将两个异步函数链接在一起,因为第一个具有条件返回参数,导致第二个运行或退出模块。但是,我发现规格中找不到奇怪的行为。 这是我的代码的混帐摘要(您可以在此处查看完整的范围),该代码只是检查玩家是否已经在大厅中,但这无关紧要。 接下来,我们有这个异步功能。 如果,则无需运行此功能。 我试着做 我希望这将等待结果,以便可以有条件地运行,但是我收到了没有具体细节的类型错误。 为什么您不能

  • 问题内容: 我想使用生成器yield和async函数。我阅读了本主题,并编写了以下代码: 但是我得到了错误: 语法错误:异步函数中的“ yield” 如何在异步功能中使用良率生成器? 问题答案: 更新: 从Python 3.6开始,我们有了异步生成器,能够直接在协程内部使用。 Python 3.5的旧答案: 您不能在协程内部。唯一的方法是使用/ magic方法手动实现异步迭代器。在您的情况下: 输

  • 假设有一个进行各种数据库查询的库: 我想同时执行这两个查询,而不必添加到方法签名或添加装饰器。这些功能不应该完全依赖于异步。 使用中的非异步函数的最佳方法是什么? 我在找这样的东西: 提前感谢您的考虑和回复。

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 我试图利用es7异步功能,即。 在这里,所有promise*函数都进行ajax调用,并返回或如果ajax响应满足传递的参数,我相信我不能连续使用3个等待,因此需要一种方法来等待所有这些调用以某种方式返回它们的值。