我需要一些有关rxjs订阅的帮助,您能帮助我了解一下“重写”订阅吗?
例如,我有一个calendar slider
在生命周期钩子上,OnInit即时消息获取默认值,如下所示:
let today = new Date();
let monday = this.datePipe.transform(this.getMonday(today), 'yyyy-MM-dd');
let changedMonday = this.getMonday(today);
let weekDay = this.datePipe.transform(new Date(changedMonday.setDate(changedMonday.getDate() + 6)), 'yyyy-MM-dd');
this.getCalendarPeriodSubscr = this.projectsService.getCalendarPeriod(monday, weekDay)
.subscribe((dates: DateType[])=> {
this.datesFullPeriod = dates;
this.datesPeriod = this.checkWeekDays(dates)
})
然后,我需要使用另一个http从服务器获取新值,例如:
goNextDate(){
console.log('go next date')
let sunday = new Date(this.datesFullPeriod[this.datesFullPeriod.length - 1].date);
let from = this.datePipe.transform(new Date(sunday.setDate(sunday.getDate() + 1)), 'yyyy-MM-dd');
let endDate = new Date(from)
let to = this.datePipe.transform(new Date(endDate.setDate(endDate.getDate() + 6)), 'yyyy-MM-dd');
this.getCalendarPeriodSubscr = this.projectsService.getCalendarPeriod(from, to)
.subscribe((dates: DateType[])=> {
this.datesFullPeriod = dates;
this.datesPeriod = this.checkWeekDays(dates)
})
}
因此,如您所见,我为另一个订阅重写了getCalendarPeriodSubscr(getCalendarPeriodSubscr的类型为Subscription)。
我知道ab .share()或推送到全局Subscription []或将Subject用于下一个取消订阅。但是我不明白,因为我真的需要像这样的东西。 所有这些都有助于我取消订阅。
所以,有谁知道,将“重写”给我我想要的内容吗?所有这些http 的1个订阅(我不确定第一个和下一个订阅(除了最后一个订阅)会在何时销毁重写前一个)?
答案 0 :(得分:0)
删除本地参考不会破坏通知者的参考。 (也许)
(编辑)我错过了细节@jelle,指出冷的可观察物在哪里完成了-在您使用http的情况下,答案是正确的。
因此,应该取消订阅的方式是取消订阅,以便通知者不会尝试通知他们某些更改。订阅的一个误解是,当本地引用用尽时,它们就会消失,但是,已订阅的通知者也仍然带有对该订阅的引用,因此需要取消订阅才能从通知者中删除该引用。>