Назовите и сравните операторы высшего порядка RxJS: switchMap, mergeMap, concatMap и exhaustMap.

В RxJS оператор switchMap используется для переключения на новый внутренний Observable при поступлении нового значения, при этом предыдущий внутренний Observable отменяется.

Короткий ответ

Что ответить на собеседовании

В RxJS оператор switchMap используется для переключения на новый внутренний Observable при поступлении нового значения, при этом предыдущий внутренний Observable отменяется. Это полезно, когда нужно обрабатывать только последний запрос, например, при поиске с автодополнением.

Подробный разбор

Ответ с пояснениями

В RxJS оператор switchMap используется для переключения на новый внутренний Observable при поступлении нового значения, при этом предыдущий внутренний Observable отменяется. Это полезно, когда нужно обрабатывать только последний запрос, например, при поиске с автодополнением.

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

exhaustMap игнорирует новые значения, если предыдущий внутренний Observable ещё не завершился. Это предотвращает наложение запросов, но может пропускать новые данные.

Для обработки платёжных запросов лучше использовать exhaustMap или concatMap:

  • exhaustMap — если важно не запускать новый платёж, пока предыдущий не завершён (чтобы избежать дублирования).
  • concatMap — если нужно обработать все запросы последовательно, не пропуская ни одного.

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

Пример с switchMap:

input$.pipe(
  filter(text => text.length > 2),
  map(text => text.toLowerCase()),
  switchMap(query => http.get(`/search?q=${query}`))
)

Здесь switchMap отменит предыдущий запрос при новом вводе.

Для платежей:

paymentRequests$.pipe(
  exhaustMap(request => processPayment(request))
).subscribe();

Это гарантирует, что пока платеж обрабатывается, новые запросы игнорируются.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее