gpt4 book ai didi

javascript - 我怎么知道 Observable 是有错误还是没有错误完成?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:10:14 25 4
gpt4 key购买 nike

我需要在 Observable 完成时执行一些代码,这取决于是否有错误完成。我有这段代码:

const obs = getMyObservable().pipe(finalize(() => {
//here
}));

如您所见,我正在使用 finalize 运算符,但我不知道是否已完成,有或没有错误。 rxjs 中是否有某种doOnCompletedoOnError 运算符?

最佳答案

根据 https://www.learnrxjs.io/

使用最新的 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 个主要管道:

  1. 在订阅前确实会改变结果的管道。
  2. 在订阅前不会改变结果的管道。
  3. 特种管道。

Tap 例如来自第二种类型,它可以从 observable 或之前的管道中获取输入并对其执行任何操作,但不能更改管道的结果下一步。

Map 类似,但它属于第一种管道,它接受一个输入并必须返回一个输出,可以在下一个管道或最终管道中使用订阅。

Finalize 是一个特殊的管道,它的作用与 Tap 相同,但在订阅之后。例如,记录最终结果或在完成后取消订阅是很好的。

CatchError 是一个改变结果的管道,但只有在前一步抛出错误时才会调用它。这用于避免未处理的错误,你应该返回一个可观察的“默认”而不是失败的可观察的(所以我们处理错误并且应用程序不会中断)。

如果 catchError 已启动,您可以猜测您的 observable 何时出现错误,并在它到达订阅之前立即处理它。

如果此管道没有启动,则认为结果没有错误。

关于javascript - 我怎么知道 Observable 是有错误还是没有错误完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50409658/

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