繁体   English   中英

捕获Observable会停止来自Observable.interval的HTTP调用

[英]Catch in Observable stops HTTP Calls from Observable.interval

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

每隔10秒,我们就会进行一次HTTP调用。 如果发生错误,observable将完成,不再进行任何调用。 如何预防呢?

这是正确的行为,当发送了completeerror通知时,观察者将取消订阅并处理该链。

您可以使用retry()运算符进行重新订阅,但是通过此简短描述很难说出您的目标是什么。

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

takeUntil()是可观察的。

RxJS实现了takeUntil运算符。 您可以将它传递给Observable或Promise,它将监视是否会触发takeUntil以停止镜像源Observable。

欲了解更多信息, 请点击这里

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM