Angular 2.如何处理Observable中重定向的4xx错误?
Angular 2. How to handle 4xx errors with redirect in Observable?
我有一个调用 api
的服务
getItems(itemId: number): Observable<any> {
return this.http.get(url, headers)
.map(this.extractDataSingle)
.catch(this.handleError)
}
如果服务器以 4xx 响应,则调用 catch
部分。
这是我的 handleError
方法。
private handleError = (error: any) => {
//Here I want to redirect to login.
}
我想重定向到 login
页面。
简单地输入 this._router.navigate(['Login']);
是行不通的,因为我必须 return 一个 Observable
。
返回一个空的 Observable return Observable.empty;
也不起作用,因为那时我的订阅者会收到错误消息:Cannot read property 'subscribe' of undefined
.
如何实现将用户重定向到登录页面?当然,我可以更改我的订阅者以捕获错误并通过我的订阅者重定向。但是我觉得在我的服务中处理错误比较好
我也对如何处理 4xx 错误的完全不同的解决方案持开放态度。
编辑:
感谢@GüntherZöschbauer。 return Observable.of([]);
正是我所需要的。
但是,请注意 this
。为了访问 handleError
方法中的 router
使用 bind(this)
in .catch(this.handleError.bind(this))
getItems(itemId: number): Observable<any> {
return this.http.get(url, headers)
.map(this.extractDataSingle)
.catch(this.handleError.bind(this))
}
否则您将无法访问您的 router
。
我猜这就是你想要的:
private handleError = (error: any) => {
this._router.navigate(['Login']);
return Observable.of([]);
}
我有一个调用 api
的服务getItems(itemId: number): Observable<any> {
return this.http.get(url, headers)
.map(this.extractDataSingle)
.catch(this.handleError)
}
如果服务器以 4xx 响应,则调用 catch
部分。
这是我的 handleError
方法。
private handleError = (error: any) => {
//Here I want to redirect to login.
}
我想重定向到 login
页面。
简单地输入 this._router.navigate(['Login']);
是行不通的,因为我必须 return 一个 Observable
。
返回一个空的 Observable return Observable.empty;
也不起作用,因为那时我的订阅者会收到错误消息:Cannot read property 'subscribe' of undefined
.
如何实现将用户重定向到登录页面?当然,我可以更改我的订阅者以捕获错误并通过我的订阅者重定向。但是我觉得在我的服务中处理错误比较好
我也对如何处理 4xx 错误的完全不同的解决方案持开放态度。
编辑:
感谢@GüntherZöschbauer。 return Observable.of([]);
正是我所需要的。
但是,请注意 this
。为了访问 handleError
方法中的 router
使用 bind(this)
in .catch(this.handleError.bind(this))
getItems(itemId: number): Observable<any> {
return this.http.get(url, headers)
.map(this.extractDataSingle)
.catch(this.handleError.bind(this))
}
否则您将无法访问您的 router
。
我猜这就是你想要的:
private handleError = (error: any) => {
this._router.navigate(['Login']);
return Observable.of([]);
}