我正在使用RxJS
,我可以看到RxJS 5.5.2
中有2个功能可用。 .finally
是否会被移除,并且它会被放置在pipe()
的{{1}}旁边的病房,是原因还是有其他变化?
它们是否相同,现在最终通话是在RxJS 6.0.0
内?
或者他们有什么明显的区别?
pipe()
method()
.pipe(
finalize(() => {
// do some operation
})
)
答案 0 :(得分:9)
两者具有相同的功能,一旦完成observable,同样的调用操作完成但不同之处在于您正在使用的rxjs版本
在v5.5之前,它最终被称为
从v5.5起,它被重命名为finalize(由于关键字限制),因为引入了可管理的操作符,这有助于更好的树抖动。有关详细信息,请查看此link
答案 1 :(得分:1)
它们非常相似,但是我可以想到一个明显的区别。 finalize
(由于是操作员)不必位于pipe
的末尾。这看似微不足道,但是取决于链中哪些运算符背后的,可能会有差异。
例如,考虑来自fetch
的链,该链使用shareReplay
在多个组件之间共享,而无需重新触发HTTP调用。如果将finalize
放在shareReplay
之前,它只会被调用一次(因为fetch
只会完成一次),但是如果将它放在 之后{{1 }},每个订阅者将被调用一次,因为shareReplay
将为每个订阅者创建一个带有自己的终结函数的Observable。