Abort Fetch API Request
Here's how to abort a fetch based on a timeout.
Sometimes you want to stop a fetch
request mid request. Perhaps, for instances, there's not a timeout on the backend server. You could be fetching... forever.
There's not a timeout
option to pass to fetch
. Instead, you get to light up the "fetch signal":
The signal is an option to the fetch
api (2nd arg):
An AbortSignal object instance; allows you to communicate with a fetch request and abort it if desired via an AbortController.
As the docs say, the signal will come from an AbortController
. Instantiate one of those, pass the signal to the fetch, then call abort
, and the fetch
is stopped short.
This will start and immediately stop the fetch
:
const controller = new AbortController()
const response = await fetch('https://swapi.dev/api/people/1', {
signal: controller.signal,
})
controller.abort()
If you wanted to make a request and then abort based on a timeout, say 5 seconds, you can do that too:
const controller = new AbortController()
const timer = setTimeout(() => controller.abort(), 5000)
const response = await fetch('https://swapi.dev/api/people/1', {
signal: controller.signal,
})
clearTimeout(timer)
If your request comes back before the 5 second mark, the timer is cleared, and it won't abort. Otherwise, it's goooooooone.