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

时间:2017-08-16 13:56:07

标签: javascript angular rxjs observable

 browser.actions().mouseMove(this.subMenuLink).click().perform();

我们每10秒拨打一次HTTP电话。如果发生错误,可观察到完成,它就不再进行任何调用。如何防止?

4 个答案:

答案 0 :(得分:0)

这是正确的行为,当发送completeerror通知时,观察员会取消订阅,并且链被处理掉。

您可以使用retry()运算符重新订阅,但很难通过此简要说明了解您的目标是什么。

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

答案 1 :(得分:0)

可观察的takeUntil()。

RxJS实现了takeUntil运算符。您可以传递一个Observable或Promise,它将监视触发takeUntil的项目以停止镜像源Observable。

了解更多信息click here

答案 2 :(得分:0)

试试这个:

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

我希望它可以帮助你

答案 3 :(得分:0)

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