Заставьте подписчиков слушать даже после того, как они получили результат - PullRequest
0 голосов
/ 23 января 2019

Я работаю над получением нового токена JWT после истечения срока его действия с помощью токена обновления, а также повторно отправляю запрос, который не выполнен из-за моего JWT с истекшим сроком годности, я успешно могу сделать это с помощью приведенного ниже кода.

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

    if (request.url.indexOf('Auth/refresh') !== -1) {

      let headers = { Authorization: this.authService.getRefreshToken() };
      request =  request.clone({
        setHeaders: headers
      });
    }


    const customReq = request.clone({
      // headers: request.headers.set('app-language', 'it')
    });

    return next
      .handle(customReq)
      .do((ev: HttpEvent<any>) => {
        if (ev instanceof HttpResponse) {

      })
      .catch(response => {
        if (response instanceof HttpErrorResponse) {

      if (response.error.startsWith("ExpriedJWT") ){
        console.log("Token Expired");
        if (!this.refreshRequestSent) {
          this.authService.refreshToken().subscribe((data: any) => {
            console.log("Token Renewd");
            this.sendFailedRequests(next);
            this.refreshRequestSent = false;
          });
          this.refreshRequestSent = true;
        }
        this.failedRequests.push(customReq);
      }


        }
        return observableThrowError(response);
      });
  }

  private sendFailedRequests(next: HttpHandler) {
    for (let i = 0; i < this.failedRequests.length; i++) {
      next.handle(this.failedRequests[i]);

    }
    this.failedRequests = [];
  }

Проблема в том, что подписчики запроса, получившего 401, и я негодую, больше не слушают, и хотя я получаю ответ на него. Это не имеет никакого смысла для меня. Итак, вернемся к моему вопросу, как заставить этих абонентов продолжать слушать или работать в этом случае

...