Вопрос с собеседования · Frontend

Как в Angular используются RxJS и Observable?

MiddleАсинхронность и event loop
Ещё спрашивают так:
  • Чем Observable отличается от Promise?
  • Что делает switchMap?
Коротко

Observable — поток значений во времени (может выдать много значений, ленив до подписки, отменяется отпиской), в отличие от Promise с одним значением. HttpClient, события форм и роутера в Angular — Observable. Операторы строят обработку: map, filter, debounceTime, distinctUntilChanged, switchMap (отменить предыдущий запрос при новом значении — поиск), catchError. Подписки обязательно закрывать: async pipe в шаблоне, takeUntilDestroyed — иначе утечки. Для состояния компонентов всё чаще используют сигналы, а RxJS — для асинхронных потоков.

  • switchMap — поиск, mergeMap — параллельно, concatMap — по очереди
  • toSignal и toObservable связывают сигналы и RxJS
  • Подписка внутри подписки — антипаттерн, нужен оператор

Подробно

results$ = this.query.valueChanges.pipe(
  debounceTime(300), distinctUntilChanged(),
  switchMap(q => this.api.search(q)),
);

Что хотят услышать

  • Отличие Observable от Promise.
  • Основные операторы, switchMap.
  • Отписка и утечки.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Observable выдаёт ровно одно значение, как Promise, и запускается сразу при создании
  • ✗switchMap выполняет все запросы параллельно и не отменяет старые, а лишь упорядочивает их ответы
  • ✓Ленивый отменяемый поток; цепочки операторов, отписка через async pipe или takeUntilDestroyed
  • ✗Отписываться от Observable не нужно: Angular закрывает все подписки сам

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования