【发布时间】:2023-03-26 12:40:01
【问题描述】:
我正在尝试从 observable 中提取最后一个发出的值。但是 rxJS 有两个运算符 last() 和 publishLast()。
rxJS 中的 last 和 publishLast 操作符有什么区别?
【问题讨论】:
标签: rxjs6 rxjs-pipeable-operators
我正在尝试从 observable 中提取最后一个发出的值。但是 rxJS 有两个运算符 last() 和 publishLast()。
rxJS 中的 last 和 publishLast 操作符有什么区别?
【问题讨论】:
标签: rxjs6 rxjs-pipeable-operators
两个主要区别:
last() 接受一些参数(predictate 函数在某些条件下过滤发出的值和一个默认值);
publishLast() 从multicast() 返回一个ConnectableObservable,其参数为AsyncSubject(),它订阅源,而last() 返回一个仅发出最后一项的Observable如果没有发出此类项目,则返回 NoSuchElementException(使用 takelast() operator)。这就是关键的区别,因为takeLast:
记住最新的计数值,然后仅在 源代码完成。
因此,如果源尚未完成,last() 将不会发出,而publishLast() 将发出。
另外,为了从 publishLast() 返回的 observable 开始发射,您必须 connect() 它(因为它是一个 ConnectableObservable)。
const ob$ = source.pipe(publishLast())
ob$.connect()
为了让 Typescript 编译器满意,也可以转换它的类型:
const ob$ = source.pipe(publishLast()) as ConnectableObservable<an>;
【讨论】: