rxJS中的last和publishLast运算符有什么区别?

时间:2019-05-09 05:36:47

标签: rxjs6 rxjs-pipeable-operators

我正在尝试从可观察值中提取最后一个发出的值。但是rxJS有两个运算符last()publishLast()

rxJS中的last和publishLast运算符有什么区别?

1 个答案:

答案 0 :(得分:2)

两个主要区别:

  1. last()带有一些参数( predictate 函数可在某些条件下过滤发射值和默认值);

  2. 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>;