В чем разница между оператором last и publishLast в rxJS? - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь вытащить последнее излученное значение из наблюдаемой. Но у rxJS есть два оператора last () и publishLast () .

В чем разница между оператором last и publishLast в rxJS?

1 Ответ

2 голосов
/ 09 мая 2019

Два основных отличия:

  1. last () принимает некоторые параметры ( функция предиката для фильтрации испускаемого значения по некоторому условию и значению по умолчанию);

  2. publishLast () возвращает ConnectableObservable из multicast() с AsyncSubject() в качестве его параметра, который подписывается на источник, в то время как last() возвращает Observable, который испускает только последний элемент или NoSuchElementException, если такие элементы не генерируются ( с использованием takelast() operator ). И это принципиальная разница, потому что takeLast:

Запоминает последние значения счетчика, а затем выдает их только тогда, когда Источник завершен.

Таким образом, если источник не завершен, last() не будет излучать, а publishLast() будет излучать.

Также для того, чтобы возвращаемая наблюдаемая из publishLast() начала излучать, вы должны connect() ее (потому что это ConnectableObservable).

const ob$ = source.pipe(publishLast())
ob$.connect()

И чтобы компилятор Typescript был счастлив, приведите также его тип:

const ob$ = source.pipe(publishLast()) as ConnectableObservable<an>;
...