Подписка на rxjs уничтожена или нет, когда она была переписана?
Мне нужна помощь с подпиской на rxjs, можете ли вы помочь мне понять что-то вроде "переписать" подписку.
Например, у меня есть слайдер календаря
При подключении жизненного цикла 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(), или отправляюсь в глобальную подписку [], или использую тему для следующей отписки. Но я не понимаю, потому что мне действительно нужно что-то подобное. Все это поможет мне отписаться от него один раз.
Так что, пожалуйста, кто-нибудь знает, "переписать" даст мне то, что я хочу, как 1 подписка на все эти http(я не уверен, что 1-я и следующая подписка, кроме последней, уничтожаются при перезаписи предыдущей)?
1 ответ
Удаление вашей локальной ссылки не приведет к уничтожению ссылки уведомителя. (Может быть)
(Правка) Я пропустил детали, которые @jelle указал на то, где холодные наблюдаемые завершают себя - в вашем случае с http, этот ответ правильный.
Таким образом, способ уничтожения подписок состоит в том, чтобы отписаться от них, чтобы уведомитель не пытался уведомить их о том, что что-то изменилось. Недоразумение с подписками состоит в том, что когда локальная ссылка используется, они исчезают, однако уведомитель, на который была подписана, все еще несет ссылку на эту подписку, следовательно, необходимо отписаться, чтобы удалить ссылку из уведомителя.