我有一个叫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']);
不起作用,因为我必须返回Observable
。
返回空的Observable return Observable.empty;
也不起作用,因为我的订阅者收到了错误:Cannot read property 'subscribe' of undefined
。
如何实现将用户重定向到登录页面?当然,我可以更改我的订阅者以捕获错误并通过我的订阅者重定向。但我认为最好在我的服务中处理错误。
我也对如何处理4xx错误的完全不同的解决方案持开放态度。
编辑:
感谢@GüntherZöschbauer。 return Observable.of([]);
正是我所需要的。
但是,请注意this
。要访问router
方法中的handleError
,请使用bind(this)
中的.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
。
答案 0 :(得分:6)
我想这可以做你想要的:
private handleError = (error: any) => {
this._router.navigate(['Login']);
return Observable.of([]);
}