问题
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?
回答1:
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
来源:https://stackoverflow.com/questions/36225862/handle-a-500-response-with-the-fetch-api