Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handle a 500 response with the fetch api

We have the following call to fetch.

this.http.fetch('flasher', { method: 'post', body: jsonPayload })     .then(response => response.json())     .then(data => console.log(data)); 

This works when we receive a 200 response but logs nothing to the console when we receive a 500 response. How do we handle a 500?

like image 210
Shaun Luttin Avatar asked Mar 25 '16 18:03

Shaun Luttin


People also ask

How do I use fetch API response?

The Fetch API allows you to asynchronously request for a resource. Use the fetch() method to return a promise that resolves into a Response object. To get the actual data, you call one of the methods of the Response object e.g., text() or json() . These methods resolve into the actual data.

How does fetch handle 404?

The Promise returned from fetch() won't reject on HTTP error status even if the response is an HTTP 404 or 500. Instead, it will resolve normally (with ok status set to false), and it will only reject on network failure or if anything prevented the request from completing.


1 Answers

Working Solution

Combining then with catch works.

fetch('http://some-site.com/api/some.json')     .then(function(response) {                      // first then()       if(response.ok)       {         return response.text();                }        throw new Error('Something went wrong.');   })     .then(function(text) {                          // second then()     console.log('Request successful', text);     })     .catch(function(error) {                        // catch     console.log('Request failed', error);   }); 

Details

fetch() returns a Promise containing a Response object. The Promise can become either fulfilled or rejected. Fulfillment runs the first then(), returns its promise, and runs the second then(). Rejection throws on the first then() and jumps to the catch().

References

MDN - Promise

MDN - Checking that the fetch was successful

Google - Introduction to Fetch

like image 77
Shaun Luttin Avatar answered Nov 07 '22 07:11

Shaun Luttin