Есть ли необходимость явно отписаться от сервиса в компоненте и почему? (Угловой 7) - PullRequest
0 голосов
/ 15 января 2019

Недавно я наткнулся на статьи, объясняющие наблюдаемые, и, поскольку я новичок в Angular, я пытался найти наилучший из возможных способов сделать все.

Я наткнулся на эту статью: https://blog.angularindepth.com/angular-question-rxjs-subscribe-vs-async-pipe-in-component-templates-c956c8c0c794, в которой рассматривается подписка и асинхронный канал.

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

Итак, я знаю, что ваша подписка на услугу может утечь, и согласно этой статье , если вы собираетесь использовать subscribe(), тогда вам следует unsubscribe() во время ngOnDestroy().

В противном случае это произойдет:

Подписка никогда не отписывается, поэтому, если Observable не завершится сам по себе, весь этот компонент, его шаблон и все связанные с ними объекты будут жить в памяти вечно.

Однако я также видел, как иногда люди говорят, что вам не нужно явно отказываться от подписки при вызове службы в компоненте, потому что Angular делает это для вас? Может быть, я запутываю себя, но все, что я хочу, это определенный ответ, поэтому я знаю, что реализовать при использовании subscribe(), чтобы утечки памяти не были проблемой.

Так нужно ли явно unsubscribe() из service в моем component? Объяснение поможет будущим людям, если это возможно. Спасибо!

Ответы [ 2 ]

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

Вы должны понимать наблюдаемый и наблюдательный поток. Может быть, вам помогут следующие пункты:

  • Вам не нужно отписываться, если наблюдатель выполнил: Это означает, что вы можете написать это:

    Observable.create((observer) =>  {
     observer.next(true)
     observer.complete();
    });
    
  • Вам не нужно отписываться от http-запроса. (оно тоже завершено).

  • Вы должны отписаться от событий маршрутизатора

  • Вы должны отписаться от (не завершенных) событий времени

Проверьте эту статью, чтобы получить больше информации по этой теме: https://netbasal.com/when-to-unsubscribe-in-angular-d61c6b21bad3

Чтобы проверить свой код, вы можете использовать devtools для профилирования Chrome. Смотрите слушателей событий.

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

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

Вы можете использовать асинхронный канал, чтобы событие отмены ваших наблюдаемых обрабатывалось Angular или был альтернативный способ использования takeUntil

Пожалуйста, обратитесь к этой статье для лучшего объяснения takeUntil - RxJS: Не отписывайтесь

Также рассмотрите эту статью, чтобы избежать утечек takeUntil - RxJS: Как избежать утечек takeUntil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...