我需要在 Observable 完成时执行一些代码,这取决于是否有错误完成。我有这段代码:
const obs = getMyObservable().pipe(finalize(() => {
//here
}));
如您所见,我正在使用 finalize
运算符,但我不知道是否已完成,有或没有错误。 rxjs
中是否有某种doOnComplete
或doOnError
运算符?
最佳答案
使用最新的 RXJS,您可以使用这 3 个运算符
const obs = getMyObservable().pipe( // Let's assume 'obs' returns an array
tap(() => console.log('Action performed before any other')),
catchError(() => { console.error('Error emitted'); return of([]); }), // We return [] instead
finalize(() => console.log('Action to be executed always')) // Either Error or Success
);
obs.subscribe(data => console.log(data)); // After everything, we log the output.
希望对你有帮助
根据 JoniJnm 评论编辑
更具体地说,有 3 个主要管道:
- 在订阅前确实会改变结果的管道。
- 在订阅前不会改变结果的管道。
- 特种管道。
Tap
例如来自第二种类型,它可以从 observable 或之前的管道中获取输入并对其执行任何操作,但不能更改管道的结果下一步。
Map
类似,但它属于第一种管道,它接受一个输入并必须返回一个输出,可以在下一个管道或最终管道中使用订阅。
Finalize
是一个特殊的管道,它的作用与 Tap
相同,但在订阅之后。例如,记录最终结果或在完成后取消订阅是很好的。
CatchError
是一个改变结果的管道,但只有在前一步抛出错误时才会调用它。这用于避免未处理的错误,你应该返回一个可观察的“默认”而不是失败的可观察的(所以我们处理错误并且应用程序不会中断)。
如果 catchError 已启动,您可以猜测您的 observable 何时出现错误,并在它到达订阅之前立即处理它。
如果此管道没有启动,则认为结果没有错误。
关于javascript - 我怎么知道 Observable 是有错误还是没有错误完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50409658/