javascript

Fetch API con async/await en JavaScript

Cómo hacer peticiones HTTP con Fetch API y async/await. La forma moderna y limpia de consumir APIs en JavaScript.

2 min
1 abr

La forma moderna de hacer peticiones HTTP

Fetch API es la forma nativa de hacer peticiones HTTP en JavaScript. Combinada con async/await, el código es limpio y legible.

Solución rápida

async function fetchData(url) {
  const res = await fetch(url);

  if (!res.ok) {
    throw new Error(`Error HTTP: ${res.status}`);
  }

  const data = await res.json();
  return data;
}

// Uso
const usuarios = await fetchData('https://api.example.com/usuarios');
console.log(usuarios);

Explicación paso a paso

1. Función async

async function fetchData(url) {
  // El código async va aquí
}

async permite usar await dentro de la función.

2. Hacer la petición

const res = await fetch(url);

fetch() devuelve una promesa. await espera la respuesta.

3. Verificar la respuesta

if (!res.ok) {
  throw new Error(`Error HTTP: ${res.status}`);
}

⚠️ Importante: Fetch no rechaza la promesa en errores HTTP (404, 500). Debes verificar res.ok manualmente.

4. Parsear los datos

const data = await res.json();
return data;

Ejemplo completo con manejo de errores

async function getUsuarios() {
  try {
    const res = await fetch('https://jsonplaceholder.typicode.com/users');

    if (!res.ok) {
      throw new Error(`Error ${res.status}: ${res.statusText}`);
    }

    const usuarios = await res.json();
    return usuarios;

  } catch (error) {
    console.error('Error al obtener usuarios:', error.message);
    return [];
  }
}

// Llamar a la función
const usuarios = await getUsuarios();
usuarios.forEach(u => console.log(u.name));

POST con datos JSON

async function crearUsuario(datos) {
  const res = await fetch('https://api.example.com/usuarios', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(datos),
  });

  return res.json();
}

// Uso
const nuevoUsuario = await crearUsuario({
  nombre: 'Juan',
  email: 'juan@example.com'
});

Opciones comunes de Fetch

OpciónDescripciónEjemplo
methodMétodo HTTP'GET', 'POST', 'PUT', 'DELETE'
headersCabeceras{'Content-Type': 'application/json'}
bodyCuerpo de la peticiónJSON.stringify(datos)
credentialsEnviar cookies'include', 'same-origin'
signalAbortControllerAbortSignal.timeout(5000)

Timeout con AbortController

async function fetchConTimeout(url, timeout = 5000) {
  const controller = new AbortController();
  const timeoutId = setTimeout(() => controller.abort(), timeout);

  try {
    const res = await fetch(url, { signal: controller.signal });
    return await res.json();
  } finally {
    clearTimeout(timeoutId);
  }
}

Compatibilidad

Fetch API tiene soporte del 97%+ en navegadores modernos. Para soporte legacy, considera usar axios o un polyfill.

Preguntas Frecuentes

¿Qué es async/await?

Async/await es una sintaxis moderna de JavaScript que permite escribir código asíncrono de forma más legible, evitando callbacks y cadenas de promesas.

¿Fetch API funciona en todos los navegadores?

Sí, Fetch API tiene soporte del 97%+ en navegadores modernos. Para IE11 necesitas un polyfill.

¿Fetch maneja errores automáticamente?

No. Fetch solo rechaza promesas en errores de red. Para errores HTTP (404, 500) debes verificar response.ok manualmente.

¡Código copiado!