Javascript 清除排队事件的行为主体,因为每个事件都在Angular2中用可观察对象进行处理
我有一个问题,我确信这完全是基于我(缺乏)对可观察事物的全面理解 这是一个使用rx/js和Observables的Angular2(v4.0.3)项目 我有一个状态存储,用于保存状态服务中的事件:Javascript 清除排队事件的行为主体,因为每个事件都在Angular2中用可观察对象进行处理,javascript,angularjs,events,rxjs,angular2-observables,Javascript,Angularjs,Events,Rxjs,Angular2 Observables,我有一个问题,我确信这完全是基于我(缺乏)对可观察事物的全面理解 这是一个使用rx/js和Observables的Angular2(v4.0.3)项目 我有一个状态存储,用于保存状态服务中的事件: // Observable string sources private currentEventStore = new BehaviorSubject<string>(""); // Observable string streams public currentEve
// Observable string sources
private currentEventStore = new BehaviorSubject<string>("");
// Observable string streams
public currentEvent$ = this.currentEventStore.asObservable();
// Service message commands
setCurrentEvent(nextEvent: string) {
this.currentEventStore.next(nextEvent);
}
我遇到的问题是,存储正在累积所有事件并每次返回所有事件,因此当我生成一个“创建”事件时,我的订阅函数将拾取该事件并在第一次传递时创建一个完美的记录,但是如果我生成第二个“创建”事件,我的订阅函数将拾取2个事件并创建2个记录,在下一个“创建”事件中,它会创建3条记录,以此类推
我需要做的是将事件从流中清除,以便currentEvent$store只保存尚未寻址的事件
有没有办法冲洗商店?或者,在我的期望和实施过程中,我缺少了什么吗?通常情况下,在我的头撞上一个问题几天后,在发布一个问题的几个小时内,我就找到了答案 这里的问题是,每次我重新访问注册订阅服务器的组件时,它都会向可观察对象添加一个新的订阅服务器,因此在第二次访问时,有两个订阅服务器,每个订阅服务器都会触发,导致事件被处理两次。第三次返回,现在有三个订阅者,因此事件被处理三次 我需要做的是修改订阅,以便将它们分配给变量,然后在销毁组件时取消订阅 因此订阅应该是这样的(注意添加了'this.observeEvent=':
this.observeEvent = this.stateSvc.currentEvent$
.subscribe(
currentEvent => {
this.currentEvent = currentEvent;
if (currentEvent != '') {
this.handleCurrentEvent(currentEvent);
}
});
我将其添加到组件中:
ngOnDestroy() {
this.observeEvent.unsubscribe();
}
它取消了订阅服务器的注册,因此它们不会在每次加载此组件时累积
我之前曾试图找出如何实现这一点,但没有将Observable分配给实例变量,我无法在Ngondestory方法中找到任何有效的语法来取消订阅。唯一的一件事是
BehaviorSubject
在订阅时向每个观察者发送一个默认值(这就是ReplaySubject
所做的。)它不存储经过的值,因此问题出在其他地方,而不是在使用BehaviorSubject
时。
ngOnDestroy() {
this.observeEvent.unsubscribe();
}