No puedo decir cuál es la forma óptima de manejar el estado 500 enviado por mi API. ¿Me podría ayudar? En el caso a continuación, cuando mi API responde con un estado 500, deseo configurar un mensaje de error en mi tienda redux. Cuando mi API envió un código de estado exitoso, deseo "Buscar los mazos de usuario" en mi tienda.
Mi primer intento me pareció lógico y seco, pero no funcionó:
const createDeck = async () => { try { const request = await fetch(`${back}/deck/`, options) const response = await request.json() store.dispatch({ type: FETCH_USER_DECKS }) } catch (error) { store.dispatch({ type: SET_ERROR, message: error }) } }Cuando la API envía un estado 500, no parece que se produzca ninguna excepción y se ignora el código en mi bloque catch.
Mi segundo y tercer intento funcionaron, ya que también los excluí, pero se sienten complicados y extraños:
2do intento:
const createDeck = async () => { try { const request = await fetch(`${back}/deck/`, options) const response = await request.json() if (request.status === 201 || request.status === 200) { store.dispatch({ type: FETCH_USER_DECKS }) } else { store.dispatch({ type: SET_ERROR, message: error }) } } catch (error) { console.log('error') } }Esto funciona, pero ignora por completo el bloque catch, lo que me hace preguntarme: ¿cuál es el punto de intentar... atrapar entonces?
Tercer intento:
const createDeck = async () => { try { const request = await fetch(`${back}/deck/`, options) const response = await request.json() if (request.status === 201 || request.status === 200) { store.dispatch({ type: FETCH_USER_DECKS }) } else { throw response } } catch (error) { store.dispatch({ type: SET_ERROR, message: error }) } }Este tercer intento hace uso de catch, pero se siente extraño lanzar manualmente una excepción, para ser atrapado inmediatamente por catch.
¿Me estoy perdiendo de algo?
Isbn ha respondido adecuadamente a esto en los comentarios. Lo pongo aquí nuevamente para mayor visibilidad: "Dado que está usando fetch (), probablemente tendría sentido adoptar su modelo de implementación y no considerar una respuesta 500 como una excepción (intento 2). Pero no vería algo malo con su tercer intento tampoco (axios, por ejemplo, generaría un error en ese caso). Tenga en cuenta que la respuesta fetch () expone una propiedad ok para verificar si la solicitud tuvo éxito o no "