Ric*_*tts 3 rxjs angular2-routing angular
使用最新版本的 Angular 我有一个非常小、简单的应用程序 - 见下文:
预测详细信息组件如下所示:
public getForecastData(forecastId) : Observable<any> {
return this.http.get<any>('/api/forecasts/' + forecastId + '/data');
}
ngOnInit() {
this.route.paramMap
.switchMap(
params => {
return this.getForecastData(params.get('id'))
})
})
.subscribe( (data) => {
// business logic here
});
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,如果 getForecastData 调用失败(服务器返回 500),则对路由器 paramMap observable 的订阅似乎丢失了。我尝试导航到不同的预测,但未调用 getForecastData 方法。
我想我需要某种错误处理,但我需要在哪里处理?除非我需要返回另一个 Observable,否则在订阅中添加错误调用似乎不起作用?
这基本上是从 Angular 站点上的教程改编而来,但是他们返回了一个带有静态数据的 Promise 并且非常坚持快乐的道路。
Observables 哪个错误将向unsubscribe上游发出信号并在下游传播错误。因此,当您的 getForecastData() 调用返回错误时,该错误将发送到您的subscribe取消订阅上游。这就是您的外部流 (the switchMap) 停止的原因。
如果您希望您的流即使getForecastData抛出错误也能继续,您需要捕获它并返回一个常规值。例如:
this.route.paramMap
.switchMap((params) => {
return this.getForecastData(params.get('id')
.do(null, err => console.log('getForecastData error: ' + err.message))
.catch(_ => Rx.Observable.empty());
})
.subscribe();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |