我为我的Angular2打字稿应用程序创建了一个HttpClient,并且我陷入了错误处理程序。
我想在发现401错误时发出一个事件,并且我能够捕获错误但不能触发我的事件,因为.catch需要附加到Observable类型的函数,所以我无法访问我的HttpClient类此范围。
errorHandler (error:any) : Observable<any> {
if(error.status == 401) {
// I want to call this.myOtherMethod() here!
this.events.publish('token_expired'); // Will throw this.events is undefined
console.log(error);
}
return Observable.throw(error.json());
}
get(url) : Observable<any> {
return this.http.get(url, {
headers: this.customHeaders
}).catch( this.errorHandler );
}
&#13;
所以我知道我无法从这个函数中访问我的this.events,但是解决方法是什么?我怎样才能在那里注入事件?
答案 0 :(得分:1)
问题是您引用了errorHandler
方法,因此会丢失this
关键字的值。这就是JavaScript的工作方式。
您可以尝试以下方法来防止这种情况:
get(url) : Observable<any> {
return this.http.get(url, {
headers: this.customHeaders
}).catch( (error:any) => {
return this.errorHandler(error);
});
}
或
get(url) : Observable<any> {
return this.http.get(url, {
headers: this.customHeaders
}).catch( this.errorHandler.bind(this) );
}
在TypeScript中使用bind
方法时,您需要注意这个缺点: