Salt la conținutul principal
Modulul 7 · Lecția 3 din 427/32 în curs~14 min
Lecții din modul (3/4)

aduce (simulat)

Pe o pagină reală, fetch(url) apelează un server. Aici, în browserul de învățare, nu putem vorbim cu servere externe, așa că vom folosi un „fals” fetch: în teste, un globalThis.fetch este injectat care returnează date predefinite, astfel încât să puteți exersa pe logica fara a depinde de retea.

API-ul care vă interesează este același cu cel real:

JS
const response = await fetch('/api/utenti');
const data = await response.json();

fetch(url) returnează o Promisiune care se rezolvă la un obiect Response. Response.json() revine la rândul său o Promisiune cu corpul analizat. Deci ai nevoie de două așteptări.

Exemplu complet

JS
async function loadUsers() {
  const response = await fetch('/api/utenti');
  const users = await response.json();
  return users;
}

const list = await loadUsers();
// [{...}, {...}]

Verifică dacă a reușit

fetch nu aruncă dacă serverul răspunde cu o stare de eroare (404, 500). Îți mai oferă un Response, dar cu ok: false:

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

fetch aruncă doar dacă rețeaua eșuează (fără conexiune, DNS, ...).

Solicitări multiple în paralel: Promise.all

Dacă trebuie să efectuați N apeluri independente, lansați-le împreună și așteptați-le pe toate cu Promise.all:

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

În serie cu două awaits consecutive ar dura aproape de două ori mai mult timp (suma); în paralel este maxim dintre cele două (cel mai lent).

Încearcă

Exercițiu#js.m7.l3.e1
Încercări: 0Se încarcă…

Definiți `loadUsers()` async: apelați fetch('/api/utenti'), apoi .json() pentru a obține matricea utilizatorilor și returnați-o.

Se încarcă editorul...
Afișează indiciu

Două așteaptă: unul la preluare, unul pe .json().

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#js.m7.l3.e2
Încercări: 0Se încarcă…

Definiți `loadInParallel(urls)` asincron: primiți o matrice de URL-uri, aduceți + .json() pe fiecare în paralel cu Promise.all și returnați o matrice a valorilor JSON primite, în aceeași ordine.

Se încarcă editorul...
Afișează indiciu

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

Soluție disponibilă după 3 încercări