gpt4 book ai didi

angular - 如何使用 RxJS 调整重试超时时间?

转载 作者:太空狗 更新时间:2023-10-29 17:12:11 26 4
gpt4 key购买 nike

我正在使用最新的 Angular 和 Typescript 以及 RxJS 5。

Angular 目前使 RxJS 成为必需品。我主要使用 C# 超过 10 年,我非常习惯 Linq/Lambdas/fluent 语法,我认为它们构成了 Reactive 的基础。

我想在重试时使用增加的超时值进行 Http get 调用,但我在查看如何执行此操作以及仍将所有内容保留在管道中(不使用外部状态)时遇到问题。

我知道我可以做到这一点,但它只会使用相同的超时值重试。

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

RxJS 的文档在很多地方都很糟糕,在这里询问它只会让我的问题被删除,这很可悲......所以我被迫查看源代码。

有没有一种方法可以每次都以增加超时持续时间的方式重试,同时保持管道中的状态?另外,我希望在第一次尝试时有一个初始超时。

我一开始尝试过类似的事情,但意识到令人困惑的 retryWhen 运算符并不是真正为我想要的而设计的:

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

关于angular - 如何使用 RxJS 调整重试超时时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com