[英]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将完成,不再进行任何调用。 如何预防呢?
这是正确的行为,当发送了complete
或error
通知时,观察者将取消订阅并处理该链。
您可以使用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.