Ana içeriğe geç
Modül 7 · Ders 3 ders 4Kurstaki 27/32~14 min
Modül dersleri (3/4)

getir (simüle edilmiş)

Gerçek bir sayfada fetch(url) bir sunucuyu arar. Burada öğrenme tarayıcısında yapamayız harici sunucularla konuştuğumuz için "sahte" bir fetch kullanacağız: testlerde, globalThis.fetch önceden tanımlanmış verileri döndüren enjekte edilmiştir, böylece üzerinde pratik yapabilirsiniz. ağa bağlı olmadan mantık.

Önemsediğiniz API gerçek olanla aynıdır:

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

fetch(url), Response nesnesine çözümlenen bir Promise döndürür. Response.json() şunu döndürür: sırayla ayrıştırılmış gövdeyle bir Söz. Yani iki beklemeye ihtiyacınız var.

Tam örnek

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

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

Başarılı olup olmadığı kontrol ediliyor

fetch Sunucu bir hata durumuyla (404, 500) yanıt verirse atmaz. Hala sana veriyor bir Response, ancak ok: false ile:

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

fetch yalnızca ağ başarısız olursa (bağlantı yoksa, DNS, ...) atılır.

Paralel olarak birden fazla istek: Promise.all

N bağımsız çağrı yapmanız gerekiyorsa, bunları birlikte başlatın ve Promise.all ile hepsini bekleyin:

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

Seri olarak iki ardışık awaits ile neredeyse iki kat daha fazla zaman alacaktır (toplam); buna paralel olarak ikisinin maksimumu (en yavaş olanı).

Deneyin

Egzersiz#js.m7.l3.e1
Denemeler: 0Yükleniyor…

`loadUsers()` async'i tanımlayın: fetch('/api/utenti') öğesini çağırın, ardından kullanıcılar dizisini elde etmek için .json() öğesini çağırın ve onu döndürün.

Düzenleyici yükleniyor…
İpucu göster

İki tane bekliyor: biri getirmede, diğeri .json()'da.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#js.m7.l3.e2
Denemeler: 0Yükleniyor…

`loadInParallel(urls)` eşzamansız tanımlayın: bir dizi URL alın, her birinde Promise.all ile paralel olarak + .json() getirin ve alınan JSON değerlerinin bir dizisini aynı sırayla döndürün.

Düzenleyici yükleniyor…
İpucu göster

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

3 denemeden sonra çözüm mevcut