当我使用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);
});
答案 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...");
}