加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 如何使用RxJS重试超时持续时间?

发布时间:2020-12-17 09:52:45 所属栏目:安全 来源:网络整理
导读:我正在使用最新的Angular和Typescript以及RxJS 5. Angular目前使RxJS成为必需品.我已经使用C#超过10年了,我非常习惯Linq / Lambdas /流利的语法,我认为它构成了Reactive的基础. 我想在重试时使用越来越大的超时值进行Http get调用,但是我遇到了一个问题,看看
我正在使用最新的Angular和Typescript以及RxJS 5.

Angular目前使RxJS成为必需品.我已经使用C#超过10年了,我非常习惯Linq / Lambdas /流利的语法,我认为它构成了Reactive的基础.

我想在重试时使用越来越大的超时值进行Http get调用,但是我遇到了一个问题,看看如何做到并仍然保持管道中的所有内容(不使用外部状态).

我知道我可以这样做,但它只会使用相同的超时值重试.

myHttpObservable.timeout(1000).retry(2);

RxJS的文档在很多地方都很差,在这里询问它只是删除了我的问题,这很难过……所以我被迫查看源代码.

有没有办法以每次增加超时持续时间的方式重试,以保持状态在管道中?此外,我想在第一次尝试时保留一个初始超时.

我一开始尝试过与此类似的东西,但实现了令人困惑的重试当操作符并非真正用于我想要的东西时:

myHttpObservable.timeout(1000).retryWhen((theSubject: Observable<Error>) => {
 return  aNewMyObservableCreatedinHere.timeout(2000);  
});

我知道我可以使用外部状态来实现这一点,但我基本上都在寻找一种优雅的解决方案,我认为,这是他们用反应式编程方式所驱动的.

目前RxJs5最大的问题之一就是文档.它确实是碎片化的,与之前的版本不相上下.通过观察 the documentation of RxJs4 you can see that .retryWhen()
已经有一个用于构建指数退避的 example,可以很容易地向RxJs5迁移:
Rx.Observable.throw(new Error('splut'))
  .retryWhen(attempts => Rx.Observable.range(1,3)
    .zip(attempts,i => i)
    .mergeMap(i => {
      console.log("delay retry by " + i + " second(s)");
      return Rx.Observable.timer(i * 1000);
    })
  ).subscribe();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读