Lompati ke konten utama
Modul 7 · Pelajaran 3 dari 427/32 dalam kursus~14 min
Pelajaran modul (3/4)

ambil (simulasi)

Di halaman sebenarnya, fetch(url) memanggil server. Di sini, di browser pembelajaran kita tidak bisa berbicara dengan server eksternal, jadi kami akan menggunakan fetch "palsu": dalam pengujian, a globalThis.fetch dimasukkan yang mengembalikan data yang telah ditentukan sebelumnya, sehingga Anda dapat berlatih di logika tanpa bergantung pada jaringan.

API yang Anda pedulikan sama dengan yang asli:

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

fetch(url) mengembalikan Janji yang ditetapkan ke objek Response. Response.json() kembali pada gilirannya sebuah Janji dengan isi yang diurai. Jadi, Anda perlu dua menunggu.

Contoh lengkap

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

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

Memeriksa apakah berhasil

fetch tidak melempar jika server merespons dengan status kesalahan (404, 500). Itu masih memberi Anda a Response, tetapi dengan ok: false:

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

fetch hanya muncul jika jaringan gagal (tidak ada koneksi, DNS, ...).

Beberapa permintaan secara paralel: Promise.all

Jika Anda perlu melakukan N panggilan mandiri, luncurkan panggilan tersebut secara bersamaan dan tunggu semuanya dengan Promise.all:

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

Secara serial dengan dua awaits berturut-turut akan memakan waktu hampir dua kali lipat waktu (jumlah); secara paralel itu adalah maksimal keduanya (paling lambat).

Cobalah

Latihan#js.m7.l3.e1
Upaya: 0Memuat…

Tentukan `loadUsers()` async: panggil ambil('/api/utenti'), lalu .json() untuk mendapatkan array pengguna, dan kembalikan.

Memuat editor…
Tunjukkan petunjuk

Dua menunggu: satu saat pengambilan, satu lagi di .json().

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#js.m7.l3.e2
Upaya: 0Memuat…

Definisikan async `loadInParallel(urls)`: terima array URL, lakukan pengambilan + .json() pada masing-masing URL secara paralel dengan Promise.all, dan kembalikan array nilai JSON yang diterima, dalam urutan yang sama.

Memuat editor…
Tunjukkan petunjuk

urls.map((u) => ambil(u).then(r => r.json())) dan Promise.all.

Solusi tersedia setelah 3 upaya