gpt4 book ai didi

rxjs - 为什么 Rxjs 会在出错时取消订阅?

转载 作者:行者123 更新时间:2023-12-04 03:25:39 26 4
gpt4 key购买 nike

简而言之:
如何在流中发生错误后继续监听而不放置 .catch每次前 .subscribe ?

如果您需要更多详细信息,请点击此处:

让我们假设我有一个当前用户或空的主题。我有时从 API 获取数据并发送到主题。它相应地更新 View 。
但是在某些时候我的服务器上发生错误,我希望我的应用程序像以前一样继续工作,但通知某些地方有关错误并继续监听我的主题。

最初我认为如果我只是这样做 userSubject.error(...)它只会触发 .catch回调和 error订阅处理程序并跳过所有成功处理程序和链。
如果我打电话后 userSubject.next(...)我所有的链和订阅者都将像以前一样工作

但不幸的是,情况并非如此。第一个未捕获后.error它从流中取消订阅订阅者,他们不再操作。

所以我的问题:为什么???
如果我想处理 null 该怎么办?值正常但也只在某些地方处理错误?

这是 RxJs 源代码的链接,其中订阅者在出错时取消订阅
https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts#L140

最佳答案

Rx可观察量 follow the grammar next*(error|complete)? ,这意味着它们在 error 之后不能产生任何东西或 complete通知已送达。
关于为什么这很重要的解释可以从 Rx design guidelines 中找到。 :

The single message indicating that an observable sequence has finished ensures that consumers of the observable sequence can deterministically establish that it is safe to perform cleanup operations.

A single failure further ensures that abort semantics can be maintained for operators that work on multiple observable sequences.


简而言之,如果您希望您的观察者在发生服务器错误后继续收听主题,请不要将该错误传递给主题,而是以其他方式处理它(例如使用 catchretry 或传递专用主题的错误)。

关于rxjs - 为什么 Rxjs 会在出错时取消订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45476902/

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