从catch调用本地方法而不使用bind angular 2+

时间:2018-02-20 00:54:47

标签: angular

我正在尝试从我的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);
  }

1 个答案:

答案 0 :(得分:0)

好的,我回答了自己的问题。

我需要将return语句从handleError方法中移出并直接进入catch块,如此 -

.catch((err) => {
      this.handleError(err);
      return Observable.throw(err);}
    );