rxjs订阅被重写时是否被销毁?

时间:2019-01-21 16:38:14

标签: angular rxjs subscription unsubscribe

我需要一些有关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个订阅(我不确定第一个和下一个订阅(除了最后一个订阅)会在何时销毁重写前一个)?

1 个答案:

答案 0 :(得分:0)

删除本地参考不会破坏通知者的参考。 (也许)

(编辑)我错过了细节@jelle,指出冷的可观察物在哪里完成了-在您使用http的情况下,答案是正确的。

因此,应该取消订阅的方式是取消订阅,以便通知者不会尝试通知他们某些更改。订阅的一个误解是,当本地引用用尽时,它们就会消失,但是,已订阅的通知者也仍然带有对该订阅的引用,因此需要取消订阅才能从通知者中删除该引用。

https://brianflove.com/2018/03/04/rxjs-the-basics/