更好的解决方案使用使用该令牌的多个异步Javascript调用刷新API承载令牌

更好的解决方案使用使用该令牌的多个异步Javascript调用刷新API承载令牌,javascript,api,rest,asynchronous,bearer-token,Javascript,Api,Rest,Asynchronous,Bearer Token,我有一个问题,我觉得必须以一些优雅的方式解决,但需要一些投入。我正在使用香草Javascript来解决这个问题,但不知道是否有更优雅的React解决方案或其他库 问题:有一个API需要一个仅持续15分钟的承载令牌。每次请求数据时,我们都需要检查令牌是否有效,如果无效,则请求一个新令牌。问题是在请求和接收新令牌之间存在时间间隔。同时,可能会发出更多的数据请求,从而导致另一个不必要的新令牌请求 const api = new testApi(); api.getSomeData(1); api.ge

我有一个问题,我觉得必须以一些优雅的方式解决,但需要一些投入。我正在使用香草Javascript来解决这个问题,但不知道是否有更优雅的React解决方案或其他库

问题:有一个API需要一个仅持续15分钟的承载令牌。每次请求数据时,我们都需要检查令牌是否有效,如果无效,则请求一个新令牌。问题是在请求和接收新令牌之间存在时间间隔。同时,可能会发出更多的数据请求,从而导致另一个不必要的新令牌请求

const api = new testApi();
api.getSomeData(1);
api.getSomeData(2);
api.getSomeData(3);
这显然是一个超级简化的测试

对getSomeData的第一个调用发生。因为没有初始令牌,所以它请求一个新令牌,然后返回其数据。但是,由于Javascript的异步特性,对getSomeData的第二个2次调用在第一个getSomeData接收到新令牌之前触发。因此,对getSomeData的两个后续调用也会请求一个新令牌

const api = new testApi();
api.getSomeData(1);
api.getSomeData(2);
api.getSomeData(3);
下面是我创建的完整类,我相信它解决了这个问题(但仍不知道这是否是最佳解决方案):

通过将this.token设置为新令牌请求返回的承诺(此处由setTimout模拟),该令牌的任何请求都必须使用。然后才能获得有效令牌

在getSomeData中,有效令牌仅出现在this.token.then()的回调中。如果我们尝试在外部访问此令牌,则它将返回未实现的承诺

该代码的结果是:

Token not valid so we need to get another
Got a new token!
Token for call 1 is 897.2653861706979
Token for call 2 is 897.2653861706979
Token for call 3 is 897.2653861706979
关于更好的方法的想法

谢谢