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

时间:2016-06-23 10:17:49

标签: angular angular2-http angular2-injection

我有一个方法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);
}

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

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

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

this.http.get(url,
              ApiRequest.ACCEPT_JSON)
              .map(ApiHelper.extractData)
              .catch(this.handleError);

3 个答案:

答案 0 :(得分:20)

由于您直接传递了该功能,因此您的课堂上没有this个上下文。一种非常简单和最佳的练习方式是使用lambda或&#34;胖箭头功能&#34;:

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

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

答案 1 :(得分:4)

您案件中import requests s = requests.session() url_login = "<loginUrl>" payload = { "username": "<user>", "password": "<pass>" } req1 = s.post(url_login, data=payload) # Now to make sure you do not get the "Access denied", use the same session variable for the request. req2 = s.get(url_earthdata) 中的{p> this可能不是您认为的那样。

尝试执行以下操作:

handleError

答案 2 :(得分:0)

可能的解决方案是将您的服务分配给类的静态变量

this.props.history.push("/")

我知道这只是解决方法,rinukkusu比我提供了绝对更好的解决方案。在解决这个问题之前,我一直使用它。但是也许在某些特殊情况下,这对某些人来说很有价值:)。

相关问题