等待另一个调用以完成Angular 4中的异步调用

时间:2017-11-01 15:03:11

标签: angular http asynchronous oauth-2.0

我们在Angular 4(目前在4.4.6)应用程序上使用和实现OAuth2,我们有以下场景:

  • 应用程序上有一些异步调用(我们称之为s1和 S2)。
  • 他们都使用令牌发出请求
  • 如果令牌过期,它将调用另一个服务并刷新它。
  • 刷新后,需要重新制作请求。

问题在于,由于调用是异步的,因此该刷新服务被同时调用2次或更多次,从而生成各种令牌。应用程序有效,但这不是正确的行为。

每次通话我都有这样的事情:

odata(url) {
 return this.http.get(this.URL, {
     headers: headers
 }).map(res => res.json()).catch(error => {
     if (error.status === 401) {
         return this.refreshToken().flatMap(resRefresh => {
             localStorage.setItem('access_token', resRefresh.access_token);
             return this.odata(url);
         })
     } else {
         return Observable.throw(error);
     }
 });}

刷新令牌服务只是另一个带URL的调用。

这是有效的,但正如我所说,同时有两个或更多刷新调用。我的问题是,在我等待刷新响应时,是否有某种方法可以阻止第二个请求,然后重新打电话(比如,然后调用两个 - >两者都将401 - >所以调用刷新 - >刷新已经调用 - >所以等待 - >刷新没问题 - >重新调用两个调用。)

由于

0 个答案:

没有答案