Skip to main content

Що робить exhaustMap?

Останній оператор з «великої четвірки» map-операторів RxJS.

Коротко (як на співбесіді)

exhaustMap - це оператор RxJS, який ігнорує нові значення, поки поточний inner Observable не завершиться.

Використовується для захисту від повторних дій користувача (наприклад, подвійний клік).

Розгорнуто

exhaustMap працює так:

  1. приходить значення з source Observable
  2. створюється inner Observable
  3. поки він виконується, усі нові значення ігноруються
  4. після завершення можна прийняти наступне значення

Приклад

ts
import { fromEvent } from 'rxjs'; import { exhaustMap } from 'rxjs/operators'; fromEvent(button, 'click').pipe( exhaustMap(() => this.http.post('/save', data)) ).subscribe();

Якщо користувач клікає:

click click click click

то виконається лише один HTTP-запит, решта ігноруються.

Візуально

source: a----b----c exhaustMap: inner a: ---------- b ignored c ignored result: ----------

Коли використовують exhaustMap

Дуже типові Angular-кейси:

  • submit форми
  • login
  • оплата
  • запобігання double-click
  • захист від повторних HTTP-запитів

Наприклад:

ts
this.loginClicks$.pipe( exhaustMap(() => this.authService.login()) )

Відмінність від інших map-операторів

Це майже обов'язкове питання на Angular-співбесіді.

ОператорПоведінка
switchMapскасовує попередній
concatMapчерга
mergeMapпаралельно
exhaustMapігнорує нові

Важливий нюанс

exhaustMap не скасовує поточну операцію, він просто ігнорує нові.

Це головна відмінність від switchMap.

Типове follow-up запитання

Дуже часто запитують:

switchMap vs exhaustMap?

Коротка відповідь:

  • switchMap → скасовує попередній
  • exhaustMap → ігнорує нові

Реальний Angular-кейс

ts
fromEvent(button, 'click').pipe( exhaustMap(() => this.api.save()) )

Захищає від:

  • double submit
  • duplicate requests
  • accidental clicks

Міні-шпаргалка по map-операторах

На співбесіді можна відповісти так:

switchMap - перемикається concatMap - черга mergeMap - паралельно exhaustMap - ігнорує

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.