Catch in Observable stops HTTP Calls from Observable.interval
1 2 3 4 | Observable.interval(10000) .switchMap(() => this.http.get(url)) .catch (err => Observable.empty()) .subscribe(data => render(data)) |
我们每 10 秒进行一次 HTTP 调用。如果发生错误,observable 将完成,它不再进行任何调用。如何预防?
1 2 3 4 5 | Observable.interval(10000) .switchMap(() => this.http.get(url) .map(res => res.json()) .catch (err => Observable.empty())) .subscribe(data => render(data)) |
试试这个:
1 2 3 4 5 6 7 8 9 10 11 12 | 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)} ) |
如果您愿意,可以在错误发生时设置任何条件,例如
1 2 3 | if(!data[error]){ render(data) } |
希望对你有帮助
takeUntil() 的 observable.
RxJS 实现了 takeUntil 操作符。您可以向它传递 Observable 或 Promise,它将监视触发 takeUntil 以停止镜像源 Observable 的项目。
更多信息请点击这里
这是正确的行为,当发送
您可以使用
1 2 3 4 | Observable.interval(10000) .switchMap(() => this.http.get(url)) .retry() .subscribe(data => render(data)) |