🦥 RxJS defer — ленивая инициализация Observable

defer — это фабрика, которая создает Observable только при подписке, а не во время объявления. Идеально подходит для:
HTTP-запросов (чтобы избежать преждевременного выполнения)
динамических данных (которые должны быть свежими при каждой подписке)
условных потоков (когда Observable зависит от состояния времени выполнения)
📌 Основные варианты использования
Свежие данные при каждой подписке
const freshData$ = defer(() => of(Date.now()));
// Новая временная метка при каждой подписке()
Работа с изменяемым состоянием
const token$ = defer(() => of(localStorage.getItem('token')));
// Всегда получает текущий токен, даже если обновлен
Условные наблюдаемые
const api$ = defer(() => isLoggedIn ? http.get('/user') : http.get('/guest') );
Генерация случайного значения
const random$ = defer(() => of(Math.random()));
// Новое случайное число на подписку
🚫 Ограничения defer
нет кэширования → используйте shareReplay, если вам нужно повторно использовать результаты.
нет отмены запроса → объедините с switchMap/takeUntil для управления отменой
⚡Когда следует выбирать defer вместо обычных наблюдаемых?
данные должны быть свежими при каждом subscribe()
cоздание наблюдаемого стоит дорого и должно быть отложено
поток зависит от изменяемых условий (флаги функций, статус аутентификации и т. д.)
Больше об 🅰️ngular в моём Telegram-канале