简而言之:如何在流中出现错误后继续监听,而不是.catch先放一个.subscribe?
如果您需要更多详细信息,请访问:
让我们假设我有一个当前用户的主题或null.我有时从API获取数据并发送给主题.它相应地更新视图.但在某些时候我的服务器上发生错误,我希望我的应用程序继续像以前一样工作,但通知一些地方有关错误和KEEP听我的主题.
最初我认为如果我这样做userSubject.error(...)只会触发订阅上的.catch回调和error处理程序,并跳过所有成功处理程序和链.如果我打电话给userSubject.next(...)我所有的连锁店,订阅者将像以前一样工作
但不幸的是情况并非如此.在第一次未被捕获之后,.error它取消订阅流中的订阅者,并且它们不再操作.
所以我的问题:为什么??? 如果我想null正常处理值但是只在某些地方处理错误,该怎么做呢?
以下是RxJs源代码的链接,其中Subscriber取消订阅错误 https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts#L140
每个 Observable 都会发出零个或多个next通知和一个error或complete两个。
因此,Subjects 具有内部状态。
然后这取决于你如何构建你的链。例如,您可以使用retry()在出错时重新订阅其源 Observable。
或者,当您将值传递给主题时,您可以只发送next通知而忽略其他两个:
.subscribe(v => subject.next(v));
Run Code Online (Sandbox Code Playgroud)
或者,如果您想在用户所在时抛出错误,null您可以使用任何捕获异常并将其作为错误通知发送的运算符。例如像这样:
.map(v => {
if (v === null) {
throw new Error("It's broken");
}
return v;
})
Run Code Online (Sandbox Code Playgroud)
无论如何,没有任何代码就很难给出更精确的建议。
| 归档时间: |
|
| 查看次数: |
3994 次 |
| 最近记录: |