【发布时间】:2021-07-01 02:10:04
【问题描述】:
我有一个节点服务器,我想在其中集成 Paypal。我有一个模块应该从贝宝返回访问令牌。这个模块有一个异步函数,看起来像这样:
let token: string | null = null;
export async function getToken() {
if (token === null) {
token = await requestTokenFromPaypal()
}
return token;
}
export function resetToken() { token = null }
main:
getToken()
getToken()
getToken()
// -> I want all calls to wait until the first request for the token is finished and then resolve to the token
// -> Currently the token will be requested three times
如果其他请求产生 401 并且令牌无效,则调用 resetToken 函数。所以需要一个新的令牌。但是现在每次调用 getToken 都会产生一个令牌请求,直到第一个请求完成并保存到令牌。
那么我如何才能等待从另一段代码调用的另一个函数的结果呢?我已经考虑过保存承诺或类似的事情,但我无法接受它。
我也尝试用谷歌搜索,但只得到标准的异步代码问题。如果您发现其他类似问题,请参考我。
【问题讨论】:
-
请描述您在代码中尝试执行的操作。例如,你如何调用你的函数?不要忘记在
getToken函数中将token分配给await requestTokenFromPaypal()的结果。而且您不需要返回已解决的承诺。 async 函数已经返回了一个 promise,从该函数返回将与执行return token相同。 -
感谢您的回复。我将编辑问题
标签: javascript node.js paypal async-await promise