В этом докладе вы узнаете:

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

Я постарался собрать много интересных фактов.

Не делайте подписки

Самый простой способ отписываться от Observable, это просто не делать подписки. Да! Это весь способ. Вам просто не нужно делать подписки. Но, вы возможно скажете, а как же я получу все необходимые мне данные? Все очень просто, если вы используете Angular, то достаточно просто передать свой Observable в AsyncPipe. Например, это может выглядеть так:

<div *ngFor="source | async"></div><app [data]="source | async"></app>А еще так {{ source | async }}

Все, вы не сделали подписку, значит вам не нужна отписка! Ура! С получением данных разобрались, но как же правильно работать с HttpClient?

Работа с HttpClient

При работе с HttpClient могут возникнуть ситуации, когда у вас не получится просто взять AsyncPipe и начать использовать его для подписки. И для того, чтобы раскрыть тему, давайте выделим несколько основных групп:

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

Простой запрос с подпиской и отпиской

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

const request = http.get('https://.../api/get');

Отлично, когда у нас есть запрос, мы можем на него подписаться. Давайте это и сделаем:

request.subscribe((response) => console.log(response));

Теперь, когда мы подписались, то совершили очень важную ошибку. Мы забыли отписаться от подписки! Но, вы спросите, а зачем? Мы же получаем данные и HttpClient сам завершит поток, когда придут данные.