1

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

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

4

1 回答 1

2

两个主要区别:

  1. last()接受一些参数(预测函数在某些条件下过滤发出的值和默认值);

  2. 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>;
于 2019-05-09T08:07:57.977 回答