Подписка на rxjs уничтожена или нет, когда ее переписывают? - PullRequest
0 голосов
/ 21 января 2019

Мне нужна помощь с подпиской на 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).

Я знаю кое-что о .share() или о переходе на глобальный Subscription[] или использовании Subject для следующей отписки. Но я не понимаю, потому что мне действительно нужно что-то подобное.

Все это помогает мне один раз отписаться от него.

Так что, пожалуйста, кто-нибудь знает, "переписать" даст мне то, что я хочу как 1 подписка для всех этих запросов HTTP (Я не уверен, что эта 1-я и следующая подписка, кроме последней , уничтожены при переписывании предыдущего)?

1 Ответ

0 голосов
/ 21 января 2019

Удаление вашей локальной ссылки не приведет к уничтожению ссылки уведомителя. (Может быть)

(Правка) Я пропустил детали, которые @jelle указал на то, где холодные наблюдаемые завершают себя - в вашем случае с http этот ответ верен.

Таким образом, подписки должны быть уничтожены отписаться , чтобы уведомитель не пытался сообщить им, что что-то изменилось. Недоразумение с подписками заключается в том, что при использовании локальной ссылки они исчезают, однако на уведомителя, на которого была подписана, все еще сохраняется ссылка на эту подписку, поэтому возникает необходимость отписаться, чтобы удалить ссылку из уведомителя.

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

...