es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una forma de pasar el objeto response al controlador then() de la promesa json() es utilizar el método Promise.all().

    Promise.all([fetch(url, params), Promise.resolve()])
        .then(([response]) => {
            return response.json();
        }).then((json) => {
            if (!response.ok) {
                // gestionar el error
            }
            console.log('Éxito:', json);
        }).catch((e) => {
            console.error("Error:", e);
        });
    

    En este código, Promise.all() se utiliza para crear un array con dos promesas: la llamada fetch() y una promesa resuelta (Promise.resolve()). Al resolver una promesa inmediatamente, proporcionamos una forma de pasar datos junto con el objeto response.

    En el controlador then(), utilizamos la desestructuración de arrays para obtener el objeto response y ignorar la promesa resuelta. A continuación, podemos continuar con el controlador json() y tener acceso al objeto response.

Comments are closed.