gpt4 book ai didi

Angular 4使用switchMap失去对路由器paramMap的订阅

转载 作者:太空狗 更新时间:2023-10-29 18:19:48 24 4
gpt4 key购买 nike

使用最新版本的 Angular 我有一个非常小、简单的应用程序 - 见下文:

simple app

预测详细信息组件如下所示:

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
});

我遇到的问题是,如果 getForecastData 调用失败(服务器返回 500),则对路由器 paramMap 可观察对象的订阅似乎会丢失。我尝试导航到不同的预测,但未调用 getForecastData 方法。

我想我需要某种错误处理,但我需要在哪里处理呢?在订阅中添加错误调用似乎不起作用,除非我需要返回另一个 Observable?

这基本上是对 Angular 网站上教程的改编,但是他们返回一个带有静态数据的 Promise,并且非常坚持快乐的道路。

最佳答案

Observables which error which will signal unsubscribe upstream and propagate the error downstream.因此,当您的 getForecastData() 调用返回错误时,该错误将发送到您的 subscribe 并取消订阅上游。这就是您的外部流(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();

In this talk by Ben Lesh errors & handling them is explained in detail.

关于Angular 4使用switchMap失去对路由器paramMap的订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45997195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com