Модуль 11 · Урок 44
Cancellation, stale responses і async UI QA
Коли requests overlap, earlier response може прийти пізніше й перезаписати current state. AbortSignal та request ID/latest-wins policy роблять lifecycle і race behavior явними.
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.
Офіційні джерела
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.