Artículo de consulta · Programación
Promesas, async/await y peticiones con fetch
Una petición de red puede tardar o fallar. JavaScript usa promesas para representar resultados que estarán disponibles más adelante. Separar el inicio de una operación de su resultado permite que otras tareas continúen mientras llega la respuesta.
Promesas y funciones async
Una promesa puede estar pendiente, cumplida o rechazada. Una función async devuelve una promesa. await permite esperar su resultado dentro de esa función: suspende su ejecución, pero no bloquea por sí mismo todo el navegador. El trabajo pesado de cálculo sigue necesitando atención al rendimiento.
Comprobar el estado HTTP
fetch devuelve una promesa de Response. Una respuesta 404 o 500 no hace que fetch rechace automáticamente la promesa. response.ok indica si el estado está entre 200 y 299. Leer el cuerpo con response.json() es otra operación asíncrona y puede fallar si el contenido no es JSON válido.
Ejemplo con un archivo local
Crea un archivo datos.json con el contenido indicado y sirve ambos archivos desde el mismo servidor HTTP local. No abras la página con file://. El ejemplo espera JSON; no es adecuado para una respuesta 204 sin cuerpo.
// datos.json: {"mensaje":"Biblioteca lista"}
async function cargarMensaje() {
const respuesta = await fetch("./datos.json");
if (!respuesta.ok) {
throw new Error("HTTP " + respuesta.status);
}
return respuesta.json();
}
cargarMensaje()
.then((datos) => console.log(datos.mensaje))
.catch((error) => console.error("No se pudo cargar:", error));Peticiones a otro origen
El navegador aplica CORS cuando una petición cruza orígenes. El servidor de destino debe permitir el acceso correspondiente. mode: "no-cors" no permite leer libremente la respuesta: produce una respuesta opaca. Antes de cambiar el cliente, comprueba la documentación y la configuración del servidor.
Comprobar éxito y fallo
- Carga el archivo válido y comprueba el mensaje.
- Cambia la ruta para provocar un 404 y verifica que se informa el error.
- Introduce JSON inválido y observa que también se captura el fallo de lectura.
- En una interfaz real, muestra estados de carga, éxito y error que el usuario pueda entender.
Referencias
Artículos relacionados
- Fundamentos: variables, condiciones y bucles
- HTML semántico y estructura de una página
- CSS: modelo de caja, Flexbox y Grid
- JavaScript: funciones, parámetros y alcance
- JavaScript: arrays, objetos y transformación de datos
- DOM y eventos: conectar JavaScript con HTML
- HTTP y APIs web: peticiones, respuestas y estados
- JSON: formato, lectura y validación de datos
- Git: cambios, commits, ramas y repositorios remotos
- Node.js y npm: scripts y dependencias de un proyecto
- Depuración y pruebas: encontrar y comprobar errores
- Formatos de color: HEX, RGB y HSL
- Identificadores UUID
- Valores aleatorios en JavaScript
