TIL: AbortSignal.timeout
For Promise timeouts, I was overworrying about doing setTimeouts with an AbortController, and cleaning them up afterwards to avoid memory leaks:
const timeoutController = new AbortController()
const timeoutHandle = setTimeout(() => timeoutController.abort(), 500)
try {
await fetch(myUrl, { signal: timeoutController.signal })
} finally {
clearTimeout(timeoutHandle)
}The gods of JS smiled in my favor this week when I found out about AbortSignal.timeout (thanks to @miho.dev). It simplifies timeouts to a single call:
await fetch(myUrl, { signal: AbortSignal.timeout(500) })