【问题标题】:RXJS Angular HTTP call a HTTP request to check internet connectionRXJS Angular HTTP 调用 HTTP 请求来检查互联网连接
【发布时间】:2018-01-12 03:23:25
【问题描述】:

所以我使用 rxjs observables 每 30 秒调用一次 http 请求,使用间隔并重复。但是,当没有互联网连接并且 observable 调用 onError 但 observable 永远不会重复时。我也在使用 retryWhen 并且它不起作用

有什么建议吗?

这是我的代码

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

【问题讨论】:

  • flatMap 到 Observable.ajax(或 fromPromise、fromCallback 等)在那里执行 ajax 并将 catch 放在那个上。一旦发生错误,什么都不能来自可观察对象
  • 你有例子吗

标签: javascript rxjs


【解决方案1】:

为避免在请求失败时破坏 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')
  );

【讨论】:

  • 没错,它会一直尝试重试。让我想想如何在那里实现延迟:)
  • @JuanCarlosFerrel 我刚刚注意到您在retryWhen 之前发现了错误。因此,您基本上可以正确通过。
  • 正在工作,我在 retryWhen 之后把我的抓到了,但是它永远不会打印出错误
  • @JuanCarlosFerrel 我认为它永远不应该打印出错误,因为您希望它一直重复,对吧?
  • 嗯,我需要发一些信息什么的
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 2021-05-26
相关资源
最近更新 更多