下面是一个描述我正在尝试做的事情的片段。在我的应用程序中,我有一个贯穿始终的 replaysubject。在某个时候,我想获得从主题发出的最后一个值,但last似乎不适用于 ReplaySubject。
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));
Run Code Online (Sandbox Code Playgroud)
上面的代码不会为 触发任何东西lastObserver,但 subscribe 工作得很好。
小智 11
也许您的困惑是关于.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));
Run Code Online (Sandbox Code Playgroud)
如果您不希望流结束,但确实希望订阅者接收订阅前发出的最后一个值,请考虑使用 for BehaviorSubject,它是为此用例设计的。
| 归档时间: |
|
| 查看次数: |
13965 次 |
| 最近记录: |