Héc*_*tor 10 javascript rxjs reactive-streams
我需要在 Observable 完成时执行一些代码,具体取决于是否最终确定有错误。我有这个代码:
const obs = getMyObservable().pipe(finalize(() => {
//here
}));
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在使用finalize运算符,但我不知道是否已最终确定是否有错误。中是否有某种doOnComplete或doOnError运算符rxjs?
使用最新的 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.
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你
基于 JoniJnm 评论的编辑
更具体地说,有3个主要管道:
Tap 例如来自第二种类型,它可以从 observable 或先前的管道中获取输入并对其进行任何操作,但不能更改下一步的管道结果。
Map 类似,但它属于第一种类型的管道,它需要一个输入,并且必须返回一个可以在下一个管道或最终订阅中使用的输出。
Finalize是一个特殊的管道,它的作用与Tap订阅后相同。例如,记录最终结果或在完成后取消订阅是很好的。
CatchError是一个改变结果的管道,但只有在上一步抛出错误时才会调用它。这用于避免未处理的错误,您应该返回一个可观察的“默认值”而不是失败的可观察对象(因此我们处理错误并且应用程序不会中断)。
如果catchError已经启动,你可以猜测你的 observable 何时发生错误,并在它到达订阅之前立即处理它。
如果未启动此管道,则认为结果没有错误。
| 归档时间: |
|
| 查看次数: |
3695 次 |
| 最近记录: |