Как я могу сделать так, чтобы только один звонок выполнялся одновременно с угловым перехватчиком? - PullRequest
0 голосов
/ 10 сентября 2018

Угловой перехватчик выглядит так:

public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

  catchError(err => {
      if (err instanceof HttpErrorResponse) {
          if (err.status === 401) {

              this.auth.getToken().subscribe((refreshOk: boolean) => {
                if (!refreshOk) {
                  this.router.navigate(["/login"]);
                }
              });
          }
      }

      return Observable.throw(err);
  })
);

Проблема в том, что одновременно выполняется четыре разных вызова API. Таким образом, четыре вызова getToken выполняются одновременно. Только одного звонка будет достаточно. Как я могу сделать так, чтобы за один раз был сделан только один звонок?

1 Ответ

0 голосов
/ 11 сентября 2018

В том месте, где вы делаете свои вызовы API, вы можете использовать наблюдаемую race и помещать свой вызов API в них.Первый ответивший выигрывает, а остальные отклоняются.

// RxJS v6+
race(
  api.get('http://abc/foo'),
  api.get('http://abc/bar'),
  api.get('http://abc/baz'),
);

// RxJS v5
Observable.race(
  api.get('http://abc/foo'),
  api.get('http://abc/bar'),
  api.get('http://abc/baz'),
);
...