【问题标题】:How do I pass result of asynchronous function to a redirect? [duplicate]如何将异步函数的结果传递给重定向? [复制]
【发布时间】:2021-12-15 10:48:52
【问题描述】:

我有一个从 API 调用返回信息的函数,其中一部分是访问令牌。然后我需要将该访问令牌插入重定向 URL 的参数中。唯一的问题是在返回数据之前 调用了重定向。关于如何在调用重定向之前等待数据返回的任何想法?

代码如下:

    oauthClient.createToken(req.url)
       .then((authResponse) => {
             oauth2_token_json = JSON.stringify(authResponse.getJson(), null,2);
             let newToken = JSON.parse(oauth2_token_json)
             accessToken = newToken.access_token
         })
        .catch((e) => {
             console.error(e);
         });

         res.redirect(`http://localhost:3000/?token=${accessToken}`)  
});

【问题讨论】:

  • res.redirect放入then...

标签: javascript node.js express asynchronous


【解决方案1】:

再添加一个.then() 并确保前一个.then() 返回authToken(或任何变量)。现在在下一个嵌套的.then() 中运行res.redirect(..).. 的逻辑。

这样可以确保代码首先等待异步部分完成。 then-ables 是确保您的代码仅在承诺解决后才运行的最佳方法。 JavaScript 执行者一旦看到异步代码块,就会跳到下一行代码,即,可能是一个 promise,.then()s,async-awaits。 这就是为什么res.redirect() 运行得更早的原因。

【讨论】:

  • 你为什么还需要一个then...?!
猜你喜欢
  • 2015-12-01
  • 2013-05-21
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 2021-08-16
相关资源
最近更新 更多