Нет, они не делают то же самое.
Цель последнего состоит в том, чтобы заблокировать наблюдаемое от испускания чего-либо до тех пор, пока оно не завершится, и в этот момент оно немедленно испускает то, что было последним значением.Любой, кто хочет увидеть это последнее значение, должен подписаться до того, как оно произойдет.
Цель 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»