Поскольку мытье рук и социальное дистанцирование являются основными инструментами для устранения утечки вируса короны, так как отказ от подписки является важным инструментом для предотвращения утечек памяти при использовании Observables. Это необходимо сделать, иначе в нашем приложении останутся неиспользуемые ссылки на объекты. Но если мы используем HTTP-клиент, нет необходимости вызывать отмену подписки. Что это такое?
Ответ живет внутри, как на самом деле Angular создает эту наблюдаемую. Если мы покопаемся в исходном коде Angular, то найдем класс под названием XHRConnection, который отвечает за создание запроса AJAX, преобразование его в Observable и возврат ответа. Вот как выглядит процесс создания (не читайте полностью, просто взгляните)
Самый важный для нас фрагмент кода - это
Поэтому всякий раз, когда ответ приходит от запроса AJAX, он вызывает метод next
, именно так мы получаем ответ внутри нашей subscribe
функции. После того, как выполнение нашей функции будет завершено, Angular бесполезно поддерживать этот наблюдаемый объект, поэтому он вызывает метод complete()
, который отменяет подписку самостоятельно, поэтому вам больше не нужно вызывать функцию отмены подписки.
То же самое касается Subject, BehaviourSubject и EventEmitter. У всех них есть complete()
метод, поэтому, если вы вызовете этот метод, даже если у вас было 100 подписок, все они автоматически отменит подписку.