如何在rxjs retryWhen方法中使用角度服务

时间:2018-04-30 14:52:31

标签: angular rxjs5

当我使用retryWhen方法形成Rxjs运算符时出现401错误时,我正在进行3次http服务调用。我的问题是当我得到401错误作为状态我需要进行其他服务以更新令牌然后重新尝试http服务调用3次。我无法在retry内使用服务时回调方法,因为它始终显示为未定义。能否请你为我提供解决方案。

 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 :(得分:0)

我使用以下方式在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);
            }
        });




答案 1 :(得分:0)

您需要像这样在handlerError方法中抛出错误

handleError(error: HttpErrorResponse) {
    // return an observable with a user-facing error message
    return throwError("Error message...");
  }