angular 2 - http错误处理程序中的注入服务

Phi*_*ipp 5 angular2-injection angular2-http angular

我有一个方法handleError(),如文档https://angular.io/docs/ts/latest/guide/server-communication.html#!#error-handling

private handleError(error: any) {
    console.error(error);
    console.log(this.loginService); // <- always undefined
    return Observable.throw(error);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,this.loginService未定义的,尽管它已在我的类中正确注入.它已经在其他方法中使用,但似乎在handleError不可用.

http-catch调用方法的方式可能是问题吗?如果是这样,我怎么能绕过那个?处理错误时我需要执行一些逻辑.

这是一个关于如何将handleError方法设置为回调的示例(与文档完全一样)

this.http.get(url,
              ApiRequest.ACCEPT_JSON)
              .map(ApiHelper.extractData)
              .catch(this.handleError);
Run Code Online (Sandbox Code Playgroud)

rin*_*usu 21

由于您直接传递函数,因此您没有this类的上下文.一个非常简单和最好的练习方法是使用lambda或"胖箭头函数":

this.http.get(url, ApiRequest.ACCEPT_JSON)
    .map(res => ApiHelper.extractData(res))
    .catch(err => this.handleError(err));
Run Code Online (Sandbox Code Playgroud)

关于何时使用lambdas的一个非常好的解读:https://stackoverflow.com/a/23045200/1961059


Woj*_*tek 5

thishandleError你的情况下可能不是你想的那样。

尝试执行以下操作:

this.http.get(url,
              ApiRequest.ACCEPT_JSON)
              .map(ApiHelper.extractData) 
              .catch(this.handleError.bind(this)); // <-- add .bind(this)
Run Code Online (Sandbox Code Playgroud)