Модуль 11 · Урок 44

Cancellation, stale responses і async UI QA

Коли requests overlap, earlier response може прийти пізніше й перезаписати current state. AbortSignal та request ID/latest-wins policy роблять lifecycle і race behavior явними.

AbortSignalLatest winsAsync stateRace tests

Ownership і stale guard

const id = ++sequence;
controller?.abort();
controller = new AbortController();
const result = await request({ signal: controller.signal });
if (id !== sequence) return;
commit(result);

Abort — cooperative signal; transport/API має його підтримати. Навіть із abort stale guard корисний, бо completion могла статися на boundary. Cleanup не повинен abort newer owner.

Async state machine

Моделюйте idle/loading/success/empty/error/canceled. Loading не має приховувати весь попередній content без product decision; disable лише conflicting action, залишайте cancel/retry. Status повідомляє meaningful transition, не кожну внутрішню microtask.

Deterministic QA

Mock transport дозволяє контролювати order без нестабільної зовнішньої мережі. Перевірте delayed success, rejection, 404/500, invalid schema, abort, timeout policy, double click і B-before-A. Acceptance: latest result зберігається, aborted request не показує generic error, retry bounded.

Завантажити Async API lab →

Офіційні джерела

Практична перевірка · урок 44 з 60

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що робить AbortController?
2. Як fetch отримує cancellation?
3. Яке типове ім’я abort exception?