我有一个方法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);
答案 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比我提供了绝对更好的解决方案。在解决这个问题之前,我一直使用它。但是也许在某些特殊情况下,这对某些人来说很有价值:)。