Subject.pipe (last ()) или ReplaySubject (1)? - PullRequest
       0

Subject.pipe (last ()) или ReplaySubject (1)?

0 голосов
/ 12 сентября 2018

Является ли использование Subject с оператором last() таким же, как использование ReplaySubject (1) с точки зрения наблюдателя?

Другими словами, в этом случае:

let s1 = new Subject<any>().pipe(last());
let s2 = new ReplaySubject<any>(1)();

То есть, в этом случае, если источник последовательности для s1 и s2 одинаков, подписчик s1 и s2 увидит одну и ту же последовательность значений?

1 Ответ

0 голосов
/ 12 сентября 2018

Нет, они не делают то же самое.

Цель последнего состоит в том, чтобы заблокировать наблюдаемое от испускания чего-либо до тех пор, пока оно не завершится, и в этот момент оно немедленно испускает то, что было последним значением.Любой, кто хочет увидеть это последнее значение, должен подписаться до того, как оно произойдет.

Цель ReplaySubject - иметь возможность подписаться поздно.С ReplaySubject (1), если кто-то подпишется на наблюдаемое после того, как оно уже что-то испускает, они сразу же получат повтор последней испущенной 1 вещи.

Пример 1:

let subject = new Subject();
let s1 = subject.pipe(last());
s1.subscribe(val => console.log('first subscription', val));
subject.next(1);
subject.next(2);
subject.next(3);
subject.complete();
s1.subscribe(val => console.log('second subscription', val));

В приведенном выше примере вы увидите, как он вышел из системы «первая подписка 3» и ничего больше.

Пример 2:

let s2 = new ReplaySubject(1);
s2.subscribe(val => console.log('first subscription', val));
s2.next(1);
s2.next(2);
s2.next(3);
s2.complete();
s2.subscribe(val => console.log('second subscription', val));

В примере 2вы увидите, что он вышел из системы «первая подписка 1», «первая подписка 2», «первая подписка 3», «вторая подписка 3»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...