我正在尝试从可观察值中提取最后一个发出的值。但是rxJS有两个运算符last()和publishLast()。
rxJS中的last和publishLast运算符有什么区别?
答案 0 :(得分:2)
两个主要区别:
last()带有一些参数( predictate 函数可在某些条件下过滤发射值和默认值);
publishLast()从multicast()
返回{strong> ConnectableObservable ,其参数为AsyncSubject()
,订阅源,而last()
返回一个仅发出最后一个项目的Observable,或者如果不发出任何此类项目,则发出NoSuchElementException(使用 takelast()
运算符)。这是关键的区别,因为takeLast
:
记住最新的计数值,然后仅在 源完成。
因此,如果源代码尚未完成,则last()
将不发光,而publishLast()
将发光。
此外,为了使publishLast()
中返回的可观察对象开始发射,还必须connect()
(因为它是一个ConnectableObservable对象)。
const ob$ = source.pipe(publishLast())
ob$.connect()
为了让Typescript编译器满意,还可以强制转换其类型:
const ob$ = source.pipe(publishLast()) as ConnectableObservable<an>;