【问题标题】:What is the difference between last and publishLast operator in rxJS?rxJS 中的 last 和 publishLast 运算符有什么区别?
【发布时间】:2023-03-26 12:40:01
【问题描述】:

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

rxJS 中的 last 和 publishLast 操作符有什么区别?

【问题讨论】:

    标签: rxjs6 rxjs-pipeable-operators


    【解决方案1】:

    两个主要区别:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 2022-06-10
      • 2012-08-27
      • 2023-03-15
      • 1970-01-01
      • 2018-08-16
      • 2012-10-10
      相关资源
      最近更新 更多