Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить exhaustMap?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**exhaustMap** - це оператор RxJS, який ігнорує нові значення, поки не завершиться поточний inner Observable, захищаючи від повторних дій користувача. **Ключове:** на відміну від switchMap, exhaustMap не скасовує поточну операцію, а просто ігнорує нові - ідеально для захисту від double-click і повторного submit.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняОстанній оператор з «великої четвірки» 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 - ігноруєДля рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.