下面是一段描述我正在尝试做的事情的片段。在我的应用程序中,我有一个在整个过程中使用的重放主题。在某个时刻,我想获取主题发出的最后一个值,但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
上面的代码不会为(
function doIt() {
console.log('Do it.');
}
)() // "Do it."
触发任何内容,但订阅工作正常。
答案 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
。