Acceder al objeto de respuesta desde una promesa JSON con fetch() en JavaScript.
Con el siguiente código:
fetch(url, params).then(response => {
return response.json();
}).then(json => {
// Manejador de json
if (!response.ok) { // <-- No funciona, no tengo acceso al objeto response aquí
if (json.error)
throw new Error(json.error); // Error específico de la aplicación
else
throw new Error(`Error HTTP ${response.statusText}(${response.status})`); // Error genérico
}
console.log('Éxito:', json);
}).catch((e) => {
console.error("Error al intentar:", e);
});
Tengo un problema en el que no puedo acceder al objeto response
desde el manejador json
. No puedo almacenar response
en una variable global porque obviamente eso es una mala idea por muchas razones. No puedo usar this
ya que simplemente apunta a window
.
Entonces, ¿cuál sería la forma correcta de pasar el objeto response
al manejador then()
de la promesa json()
en este caso?
davy.ai
Una forma de pasar el objeto
response
al controladorthen()
de la promesajson()
es utilizar el métodoPromise.all()
.En este código,
Promise.all()
se utiliza para crear un array con dos promesas: la llamadafetch()
y una promesa resuelta (Promise.resolve()
). Al resolver una promesa inmediatamente, proporcionamos una forma de pasar datos junto con el objetoresponse
.En el controlador
then()
, utilizamos la desestructuración de arrays para obtener el objetoresponse
y ignorar la promesa resuelta. A continuación, podemos continuar con el controladorjson()
y tener acceso al objetoresponse
.