我正在尝试从可观察到的中提取最后一个发出的值。但是 rxJS 有两个运算符last() 和publishLast()。
rxJS 中的 last 和 publishLast 运算符有什么区别?
我正在尝试从可观察到的中提取最后一个发出的值。但是 rxJS 有两个运算符last() 和publishLast()。
rxJS 中的 last 和 publishLast 运算符有什么区别?
两个主要区别:
last()接受一些参数(预测函数在某些条件下过滤发出的值和默认值);
publishLast()返回一个ConnectableObservable作为它的参数multicast()
,AsyncSubject()
它订阅源,同时last()
返回一个只发出最后一个项目的 Observable,如果没有发出这样的项目,则返回一个 NoSuchElementException (通过使用 takelast()
operator)。这是至关重要的区别,因为takeLast
:
记住最新的计数值,然后仅在源完成时发出这些值。
因此,如果 source 尚未完成,last()
则不会发出,而publishLast()
将发出。
此外,为了让返回的 observable 从publishLast()
开始发射,您必须connect()
使用它(因为它是一个 ConnectableObservable)。
const ob$ = source.pipe(publishLast())
ob$.connect()
为了让 Typescript 编译器满意,还可以将其类型转换为:
const ob$ = source.pipe(publishLast()) as ConnectableObservable<an>;