哪些RxJS运算符需要取消订阅?

时间:2020-09-09 16:04:13

标签: javascript typescript rxjs

我知道有些运算符会自动完成,例如forkJoin,但据我所知,还有其他一些运算符永远不会完成,因此必须取消订阅以防止任何订阅泄漏,例如CombineLatest。

有什么好方法可以告诉您哪些必须退订,哪些是安全的?或者至少是它们的完整列表?我正在努力从文档中获取此信息。

我对RxJS还是很陌生,所以请让我知道我是否似乎误会了一些东西。


请注意:我知道使用| async的情况,但是我正在开发一个现有项目,因此目前还不能使用它。我也知道并正在使用takeUntil来代替unsubscribe方法,因此这里没有参考。我只想知道在使用RxJS运算符之一之后何时需要使用takeUntil / unsubscribe

1 个答案:

答案 0 :(得分:1)

forkJoin实际上不会自动完成。这取决于对其进行修改以完成的可观察对象。如果这些可观测值没有完成,则forkJoin()返回的那个也不会完成。实际上,combineLatest具有相似的品质。

通常,所有RxJS提供的运算符都会创建可观察对象,这些观察对象会在原始可观察对象或其中至少一个发生时关闭。

实际上,这意味着开发人员正在使用RxJS来了解它们传递给操作员的可观察对象的行为。溪流可能永远卡住吗?在这种情况下,我们将需要对其进行修改以处理此问题-也许它会在无活动5秒钟后关闭。

重点是操作员要么尊重可观察输入的完成,要么会修改输入(可能是尽早完成),因为这是他们的工作意图。后一种类型的最常见示例包括“获取”:taketakeWhiletakeUntil

在库上花费足够的时间-阅读每个操作员的文档,在代码中使用它们,或者在这里询问某些特定的操作是否有意义,您将非常熟悉其中的哪个。