Fetch - Error Handling for Failed HTTP Responses and Network Errors
This is a quick example of how to handle both network errors and HTTP errors (4xx or 5xx) for Fetch API (fetch()
) requests in a single catch()
block.
GET request with error handling
This sends an HTTP GET request to an invalid URL on the Reqres api which is a fake online REST api used for testing, then writes the error message to the parent of the #get-request-error-handling .total
element and logs the error to the console.
Error Handling
The fetch()
function will automatically throw an error for network errors but not for HTTP errors such as 4xx or 5xx responses. For HTTP errors we can check the response.ok
property to see if the request failed and reject the promise ourselves by calling return Promise.reject(error);
. This approach means that both types of failed requests - network errors and http errors - can be handled by a single catch()
block instead of needing two separate pieces of error handling code.
JSON Check
The fetch .then()
callback is passed the HTTP response
object when the request is completed, the function checks if the response type is JSON before parsing the response body with the response.json()
method, because calling response.json()
will cause an error if the response doesn't contain JSON data.
// Fetch GET request with error handling
const element = document.querySelector('#get-request .result');
fetch('https://reqres.in/invalid-url')
.then(async response => {
const isJson = response.headers.get('content-type')?.includes('application/json');
const data = isJson ? await response.json() : null;
// check for error response
if (!response.ok) {
// get error message from body or default to response status
const error = (data && data.message) || response.status;
return Promise.reject(error);
}
element.innerHTML = JSON.stringify(data, null, 4);
})
.catch(error => {
element.parentElement.innerHTML = `Error: ${error}`;
console.error('There was an error!', error);
});
Run the example Fetch GET request on StackBlitz at https://stackblitz.com/edit/fetch-error-handling-http-and-network-errors
Subscribe or Follow Me For Updates
Subscribe to my YouTube channel or follow me on Twitter, Facebook or GitHub to be notified when I post new content.
- Subscribe on YouTube at https://www.youtube.com/JasonWatmore
- Follow me on Twitter at https://twitter.com/jason_watmore
- Follow me on Facebook at https://www.facebook.com/JasonWatmoreBlog
- Follow me on GitHub at https://github.com/cornflourblue
- Feed formats available: RSS, Atom, JSON
Other than coding...
I'm currently attempting to travel around Australia by motorcycle with my wife Tina on a pair of Royal Enfield Himalayans. You can follow our adventures on YouTube, Instagram and Facebook.
- Subscribe on YouTube at https://www.youtube.com/TinaAndJason
- Follow us on Instagram at https://www.instagram.com/tinaandjason
- Follow us on Facebook at https://www.facebook.com/TinaAndJasonVlog
- Visit our website at https://tinaandjason.com.au
Need Some Fetch Help?
Search fiverr to find help quickly from experienced Fetch developers.