我正在尝试从我的auth服务中的catch中调用一个方法,这样如果服务器无法识别用户(401错误等),他就会被重定向到登录页面并删除本地存储中的信息。
我想解决的问题与Angular2- Getting confused with Observable Catch closure scope完全相同。
然而,推荐的解决方案并不适合我。
如果我做this.handleError.bind(this)
则可行。
这 - .catch((err) => {this.handleError(err);});
(推荐的解决方案)不起作用。我收到以下错误 -
[ts]
Argument of type '(err: any) => void' is not assignable to parameter of type '(err: any, caught: Observable<void>) => ObservableInput<{}>'.
Type 'void' is not assignable to type 'ObservableInput<{}>'.
这是我的handleError方法 -
private handleError (error: Response | any) {
this.forceLogout();
let errMsg: string;
console.log(error);
if (error instanceof Response) {
const body = error.json() || '';
const err = body || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
this.forceLogout();
console.error(errMsg);
return Observable.throw(errMsg);
}
答案 0 :(得分:0)
好的,我回答了自己的问题。
我需要将return语句从handleError方法中移出并直接进入catch块,如此 -
.catch((err) => {
this.handleError(err);
return Observable.throw(err);}
);