如何从ReplaySubject获取最后一个值?

时间:2017-09-27 00:33:18

标签: rxjs

下面是一段描述我正在尝试做的事情的片段。在我的应用程序中,我有一个在整个过程中使用的重放主题。在某个时刻,我想获取主题发出的最后一个值,但const subject = new Rx.ReplaySubject(); subject.next(1); subject.next(2); subject.next(3); subject.next(4); subject.subscribe(num => console.log(num)); var lastObserver = subject.last(); lastObserver.subscribe(num => console.log('last: ' + num)); 似乎不适用于ReplaySubject。

lastObserver

http://regexstorm.net/tester

上面的代码不会为( function doIt() { console.log('Do it.'); } )() // "Do it." 触发任何内容,但订阅工作正常。

1 个答案:

答案 0 :(得分:2)

也许你的混淆是关于.last()运算符应该如何工作?

.last()应该等待流完成,然后在流结束之前给出最后一个值。因此,为了使其工作,流将需要结束。

我相信你的lastObserver会在主题完成后立即发出。

const subject = new Rx.ReplaySubject();

subject.next(1);
subject.next(2);
subject.next(3);
subject.next(4);

subject.subscribe(num => console.log(num));
subject.complete(); // end your stream here
var lastObserver = subject.last();
lastObserver.subscribe(num => console.log('last: ' + num));

如果您不希望您的流结束,但您确实希望订阅者在订阅之前收到最后发布的值,请考虑使用专为此用例设计的BehaviorSubject