Saltar al contenido principal
eLearner.app
Módulo 7 · Lección 3 de 427/32 en el curso~14 min
Lecciones del módulo (3/4)

fetch (simulado)

En una página real, fetch(url) llama a un servidor. Aquí en el navegador de aprendizaje no podemos comunicarnos con servidores externos, por lo que usaremos un fetch "falso": en las pruebas se inyecta un globalThis.fetch que devuelve datos predefinidos, para que puedas practicar la lógica sin depender de la red.

La API que te interesa es exactamente la misma que la real:

JS
const risposta = await fetch('/api/utenti');
const dati = await risposta.json();

fetch(url) devuelve una Promise que se resuelve en un objeto Response. Response.json() devuelve a su vez una Promise con el body procesado. Por lo tanto, se necesitan dos await.

Ejemplo completo

JS
async function caricaUtenti() {
  const risposta = await fetch('/api/utenti');
  const utenti = await risposta.json();
  return utenti;
}

const lista = await caricaUtenti();
// [{...}, {...}]

Comprobar si ha ido bien

fetch no lanza un error si el servidor responde con un estado de error (404, 500). Te da de todos modos una Response, pero con ok: false:

JS
const r = await fetch('/api/utenti');
if (!r.ok) {
  throw new Error(`HTTP ${r.status}`);
}
const dati = await r.json();

fetch solo lanza un error si la red falla (sin conexión, DNS, ...).

Múltiples solicitudes en paralelo: Promise.all

Si necesitas realizar N llamadas independientes, lánzalas juntas y espéralas todas con Promise.all:

JS
const [u, p] = await Promise.all([
  fetch('/api/utenti').then((r) => r.json()),
  fetch('/api/prodotti').then((r) => r.json()),
]);

En serie con dos await consecutivos tomaría casi el doble de tiempo (suma); en paralelo toma el tiempo de la más lenta (el máximo de las dos).

Pruébalo tú

Ejercicio#js.m7.l3.e1
Intentos: 0Cargando...

Define `loadUsers()` async: llama a fetch('/api/utenti'), luego a .json() para obtener el array de usuarios, y devuélvelo.

Cargando editor...
Mostrar pista

Due await: uno su fetch, uno su .json().

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#js.m7.l3.e2
Intentos: 0Cargando...

Define `loadInParallel(urls)` async: recibe un array de URLs, realiza fetch + .json() en cada una en paralelo con Promise.all, y devuelve un array de los JSON recibidos, en el mismo orden.

Cargando editor...
Mostrar pista

urls.map((u) => fetch(u).then(r => r.json())) e Promise.all.

Solución disponible después de 3 intentos