Catch in Observable 会停止来自 Observable.interval 的 HTTP 调用


Observable.interval(10000)
.switchMap(() => this.http.get(url))
.catch (err => Observable.empty())
.subscribe(data => render(data))

每 10 秒我们进行一次 HTTP 调用。如果发生错误,可观察变为完成,它不再进行任何调用。如何预防?

这是正确的行为,当向观察者发送completeerror通知时,观察者取消订阅并释放链。

您可以使用retry()运算符重新订阅,但很难从这个简短的描述中看出您的目标是什么。

Observable.interval(10000)
.switchMap(() => this.http.get(url))
.retry()
.subscribe(data => render(data))

takeUntil(( of observable。

RxJS 实现了 takeUntil 运算符。您可以向它传递一个可观察量或一个承诺,它将监视触发 taketill 以停止镜像源可观察

量的项目。欲了解更多信息,请单击此处

试试这个:

let dataX = Observable.interval(10000)
.switchMap(() => this.http.get(url));
let caught = dataX.catch(
Observable.return({
error: 'There was an error in http request'
}))
caught.subscribe((data) => { return render(data) },
// Because we catch errors now, `error` will not be executed
(error) => {console.log('error', error.message)}
)

如果你愿意,你可以在错误出现时提出任何条件

if(!data[error]){
render(data)
}

希望对您有所帮助

Observable.interval(10000)
.switchMap(() => this.http.get(url)
.map(res => res.json())
.catch (err => Observable.empty()))
.subscribe(data => render(data))

最新更新