Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Catch in Observable停止来自Observable.interval的HTTP调用_Javascript_Angular_Rxjs_Observable - Fatal编程技术网

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

Javascript Catch in Observable停止来自Observable.interval的HTTP调用,javascript,angular,rxjs,observable,Javascript,Angular,Rxjs,Observable,每10秒我们进行一次HTTP调用。如果发生错误,observable将完成,它将不再进行任何调用。如何防止这种情况?当发送完成或错误通知取消订阅并处理链时,这是正确的行为 您可以使用retry()操作符重新订阅,但很难从这个简短的描述中看出您的目标是什么 Observable.interval(10000) .switchMap(() => this.http.get(url)) .catch (err => Observable.empty()) .s

每10秒我们进行一次HTTP调用。如果发生错误,observable将完成,它将不再进行任何调用。如何防止这种情况?

当发送
完成
错误
通知取消订阅并处理链时,这是正确的行为

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

Observable.interval(10000)
     .switchMap(() => this.http.get(url))
     .catch (err => Observable.empty())
     .subscribe(data => render(data))
takeUntil()是可观察的

RxJS实现takeUntil操作符。您可以向它传递一个可观察项,也可以传递一个承诺,即它将监视触发TakeToll停止镜像源可观察项的项

有关更多信息,请尝试以下操作:

Observable.interval(10000)
    .switchMap(() => this.http.get(url))
    .retry()
    .subscribe(data => render(data))
如果需要,可以在错误出现时设置任何条件

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