RXJS Angular HTTP调用HTTP请求来检查Internet连接

时间:2018-01-11 16:30:21

标签: javascript rxjs

所以我使用rxjs observables每隔​​30秒使用interval和repeat来调用一个http请求。但是,当没有互联网连接且可观察的调用onError但是observable永远不会重复。我正在使用也重试当它无法正常工作

有什么建议吗?

这是我的代码

   Observable.interval(2500).repeat()
      .flatMap(() => this.http.get(url))
      .map(res => res.text())
      .catch(() => {
        return Observable.of('ERROR');
      })
      .retryWhen(error => error)
      .subscribe(data => {
          // tools.destroyLoadingMessage();
          alert('CONNECT OBSEVABLE ' + data);

         // console.log(JSON.stringify(data));
      }, err => {
        alert('DISCONNECT OBSEVABLE ' + err);
        // tools.showLoadingMessage('No inrernet');
      })

1 个答案:

答案 0 :(得分:0)

为了避免在请求失败时破坏observable,您必须从请求中捕获错误,以便流可以继续。

如果出现错误,您会看到value: error,否则将是服务器的响应。

Rx.Observable.interval(2500)
  .flatMap(() => {
    return this.http.get(url)
      .catch(error => Rx.Observable.of('error'))
  })
  .subscribe(
    value => console.log('value: ' + value),
    err => console.log('error'),
    () => console.log('complete')
  );