gpt4 book ai didi

javascript - 失败后重试 forkjoin 调用

转载 作者:行者123 更新时间:2023-11-28 14:13:11 24 4
gpt4 key购买 nike

我需要数组中每个服务的数据在 forkjoin 调用结束时返回,因此如果其中一个失败,我需要它再次尝试调用。

假设在下面的示例中,requests 数组中的三个项目之一失败。

request(): Observable<T> {
const requests = [
this.getService$.getOne(),
this.getService$.getTwo(),
this.getService$.getThree()
]

return forkJoin(requests).pipe(
map(res => this.formatFunc(res))
);
}

代码应该是什么样子,以便在调用 this.request() 时,即使其中一个服务失败并且必须再次获取数据,我仍然可以从所有三个服务获取数据?

我做了一些挖掘,发现人们正在添加 this.getService$.getOne().catch(e => of([])) ...但这似乎只返回任何内容,而不是再次调用电话。

我也见过类似的使用重试

forkJoin(requests).pipe(
retry(3),
map(res => this.formatFunc(res))
)

但是会重试重做所有三个调用还是仅重做失败的调用?

最佳答案

虽然上面的答案有无效的错误处理,但这个想法是正确的:您必须单独处理每个请求的错误。应按如下方式完成:

forkJoin([
request1.pipe(retryWhen(genericRetryStrategy())),
request2.pipe(retryWhen(genericRetryStrategy()))
])

示例中提到的genericRetryStrategy可以从这里获取(作为示例):https://www.learnrxjs.io/operators/error_handling/retrywhen.html示例 2:可自定义重试并增加持续时间。

您可以提供您想要的任何其他逻辑来代替它

关于javascript - 失败后重试 forkjoin 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58828087/

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