Два основных отличия:
last () принимает некоторые параметры ( функция предиката для фильтрации испускаемого значения по некоторому условию и значению по умолчанию);
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>;