TIL: AbortSignal.timeout

By@precioso.designJan 23, 2026

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) })