fetch — modern Promise HTTP; master AbortController or stale requests corrupt UI. Two traps: no reject on HTTP errors, no built-in timeout/cancel.
Разбор
- Doesn't reject on HTTP errors.
404/500 = successful fetch; only network failure rejects. res.ok not optional.
- No built-in timeout/cancel. Request runs until you abort. SPA requests outlive components.
AbortController — general cancellation primitive. signal into fetch; abort() → AbortError. Same signal cancels listeners, timeouts — right abstraction.
Search box, route change — abort previous or «last arrived» wins, not «last requested».
Итог
Cancellation is not fetch polish — it's correctness for any async UI driven by network.