gpt4 book ai didi

Rxjs - 如何在通知 UI 错误的同时重试错误的可观察对象

转载 作者:行者123 更新时间:2023-12-05 02:59:32 24 4
gpt4 key购买 nike

问题

假设有一个 Http 请求 observable 出错了,我们可以重试它。但我也希望 UI 通知用户此资源加载失败。什么是最好的架构?

目标 Observable 的预期行为

  1. 可重试。
  2. 长期运行。未完成或出错。
  3. 共享。多个订阅者时不会生成不必要的请求。
  4. 按需加载。未订阅时不会生成不必要的请求。
  5. 将错误通知 UI。

(3和4可以通过shareReplay({bufferSize: 1, refCount: true})实现)

我的尝试

我认为最好将错误消息传递给下游观察者,同时不断重试源。它对体系结构的更改最少。但是我没有看到我可以用 Rxjs 做到这一点的方法,因为

  1. retry() 总是拦截错误。如果您具体化错误,则 retry() 将不会重试。如果不是,则不会向下游传播任何错误。
  2. catchError() 不重新抛出将始终完成流。

虽然让UI观察者tap(,,onError)retry()可以满足这个需求,但是我觉得让UI承担这个责任是很危险的.多个 UI 观察者意味着大量的重复重试。

最佳答案

好吧,我似乎是在浏览文档时无意中找到了答案。

它从 catchError 的第二个参数的用法开始。根据文档,retry是由catchError实现的。并且我们可以用更底层的catchError来表达更多的逻辑。

原来如此

catchError((err, caught) => {
return timer(RETRY_DELAY_TIME).pipe(
mergeMap(() => caught)
startWith(err)
);
})

它重试可观察对象,同时向下游观察者发送错误消息。因此下游知道连接错误,并且可以期望接收重试值。

关于Rxjs - 如何在通知 UI 错误的同时重试错误的可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843691/

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