Отписаться от наблюдаемых таймеров, которые выдают только один раз, необходимо?

В моей программе есть несколько экземпляров timer(1000).subscribe(), а также несколько частей timer(1000, 1000).subscribe().

У меня были некоторые проблемы с утечкой памяти, и мне было интересно, могу ли я облегчить их, отписавшись от таймеров. Отказ от повторяющихся таймеров кажется простым и необходимым, но должен ли я также отписываться от таймеров, которые срабатывают только один раз?

Вторая часть моего вопроса заключается в том, есть ли лучший способ отписаться от излучающего таймера, чем поместить его в такую ​​переменную:

const myTimer = timer(1000).subscribe(() => {
    myTimer.unsubscribe();
});

Спасибо!


person mneumann    schedule 06.02.2020    source источник
comment
Вам не нужно делать myTimer.unsubscribe(); вот так. Подробнее см. stackoverflow .com/questions/38008334/ medium.com/angular-in-depth/ medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87   -  person martin    schedule 06.02.2020


Ответы (1)


timer завершится после одной эмиссии, поэтому отписываться не нужно. В качестве альтернативного способа отказа от подписки вы можете использовать экземпляр подписки. Используя это, вы получаете выгоду от хранения всех подписок и отмены подписки одним звонком.

subs=new Subscription();
subs.add(timer(1000).subscribe())
subs.unsubscribe()
person Fan Cheung    schedule 06.02.2020
comment
в приведенном выше примере take(1) было бы намного проще использовать, хотя - person maxime1992; 06.02.2020
comment
Как я уже упоминал в ответ. Таймер не требует отписки. Код отписки должен показать вам альтернативный способ обработки отказа от подписки. - person Fan Cheung; 06.02.2020