как использовать угловой сервис внутри метода rxjs retryWhen - PullRequest
0 голосов
/ 30 апреля 2018

Я делаю вызовы службы HTTP 3 раза, когда я получаю ошибку 401, используя метод retryWhen при использовании операторов Rxjs. Моя проблема заключается в том, что когда я получаю ошибку 401 в качестве статуса, мне нужно сделать другую службу для обновления токена, а затем еще раз повторить попытку вызова службы http 3 раза. Я не могу использовать сервис внутри retryWhen метода обратного вызова, так как он всегда показывает это как неопределенное. Можете ли вы дать мне решение для этого.

 return this.http.get(url, this.getOptions(options)).retryWhen(errors => {
       return errors.mergeMap((error) => {
            console.error('error status....', this, error, error.status);
            if (error.status === 401) {
                // i need to make other service call here 
                this.httpPollingService.updateToken(); // unable to call this call.
                return Observable.of(error);
            } else {
                return Observable.throw(error);
            }
        }).delay(5000).take(2);
    });

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вам нужно сгенерировать ошибку в методе handlerError следующим образом

handleError(error: HttpErrorResponse) {
    // return an observable with a user-facing error message
    return throwError("Error message...");
  }
0 голосов
/ 05 мая 2018

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

 return this.http.post(url, body, headers).catch(initialError => {
            if (initialError.status === 401) {
                return this.newTokenGenerator().flatMap(newToken => {
                    if (newToken) {
                        headers.set('beare ', newToken);
                        return this.http.post(url, body, headers).take(2);
                    }
                });
            } else {
                return Observable.throw(initialError);
            }
        });
...