w3schools sincronas promises promesas funciones example entre ejemplo diferencia anidadas javascript redux fetch-api

javascript - sincronas - Fetch: rechazar la promesa y detectar el error si el estado no es correcto?



promise typescript (3)

Acabo de verificar el estado del objeto de respuesta:

$promise.then( function successCallback(response) { console.log(response); if( response.status === 200 ) { ... } });

Esto es lo que tengo que hacer:

import ''whatwg-fetch''; function fetchVehicle(id) { return dispatch => { return dispatch({ type: ''FETCH_VEHICLE'', payload: fetch(`http://swapi.co/api/vehicles/${id}/`) .then(status) .then(res => res.json()) .catch(error => { throw(error); }) }); }; } function status(res) { if (!res.ok) { return Promise.reject() } return res; }

EDITAR: La promesa no es rechazada, eso es lo que estoy tratando de averiguar.

Estoy usando este polyfill de recuperación en Redux con redux-promise-middleware .


Gracias por la ayuda a todos, rechazar la promesa en .catch() resolvió mi problema:

export function fetchVehicle(id) { return dispatch => { return dispatch({ type: ''FETCH_VEHICLE'', payload: fetch(`http://swapi.co/api/vehicles/${id}/`) .then(status) .then(res => res.json()) .catch(error => { return Promise.reject() }) }); }; } function status(res) { if (!res.ok) { throw new Error(res.statusText); } return res; }


Fetch promete solo rechazar con un TypeError cuando se produce un error de red. Dado que las respuestas 4xx y 5xx no son errores de red, no hay nada que detectar. Tendrá que lanzar un error para usar Promise#catch .

Una respuesta de búsqueda proporciona de forma conveniente una ok , que le indica si la solicitud se realizó ok . Algo como esto debería hacer el truco:

fetch(url).then((response) => { if (response.ok) { return response.json(); } else { throw new Error(''Something went wrong''); } }) .then((responseJson) => { // Do something with the response }) .catch((error) => { console.log(error) });