rxjs中finally和finalize有什么区别

时间:2018-05-10 15:42:10

标签: angular rxjs

我正在使用RxJS,我可以看到RxJS 5.5.2中有2个功能可用。 .finally是否会被移除,并且它会被放置在pipe()的{​​{1}}旁边的病房,是原因还是有其他变化?

它们是否相同,现在最终通话是在RxJS 6.0.0内?

或者他们有什么明显的区别?

最终化

pipe()

最后

method()
   .pipe(
     finalize(() => {
      // do some operation
     })
   )

2 个答案:

答案 0 :(得分:9)

两者具有相同的功能,一旦完成observable,同样的调用操作完成但不同之处在于您正在使用的rxjs版本

在v5.5之前,它最终被称为

从v5.5起,它被重命名为finalize(由于关键字限制),因为引入了可管理的操作符,这有助于更好的树抖动。有关详细信息,请查看此link

答案 1 :(得分:1)

它们非常相似,但是我可以想到一个明显的区别。 finalize(由于是操作员)不必位于pipe的末尾。这看似微不足道,但是取决于链中哪些运算符背后的,可能会有差异。

例如,考虑来自fetch的链,该链使用shareReplay在多个组件之间共享,而无需重新触发HTTP调用。如果将finalize放在shareReplay之前,它只会被调用一次(因为fetch只会完成一次),但是如果将它放在 之后{{1 }},每个订阅者将被调用一次,因为shareReplay将为每个订阅者创建一个带有自己的终结函数的Observable。