我有一个奇怪的用例,我需要跟踪所有以前发出的事件。
多亏了 ReplaySubject,它到目前为止工作得很好。在每一个新订阅者上,这个主题都会重新发出以前的每个事件。
现在,对于特定场景,我需要能够仅提供最新发布的事件(有点像 BehaviorSubject),但保持源相同的事件。
这是我试图实现的一个片段:stackblitz
import { ReplaySubject, BehaviorSubject, from } from "rxjs";
class EventManager {
constructor() {
this.mySubject = new ReplaySubject();
}
publish(value) {
this.mySubject.next(value);
}
fullSubscribe(next, error, complete) {
return this.mySubject.subscribe(next, error, complete);
}
subscribe(next, error, complete) {
return this.mySubject.pipe(/* an operator to get the last one on new subscribe */).subscribe(next, error, complete);
}
}
const myEventManager = new EventManager();
myEventManager.publish("Data 1");
myEventManager.publish("Data 2");
myEventManager.publish("Data 3");
myEventManager.fullSubscribe(v => {
console.log("SUB 1", v);
});
myEventManager.subscribe(v => { …Run Code Online (Sandbox Code Playgroud)