Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

←

JavaScript Lanjutan

Pelajaran 21 dari 22

Iterator, generator, dan kode asinkron

async, await, try/catch, dan Promise.all

Setelah pelajaran ini kamu bisa menulis fungsi async yang menunggu Promise dengan await, menangkap penolakan dengan try dan catch, dan menjalankan beberapa Promise bersamaan dengan Promise.all, allSettled, dan race.

±14 menitDiperiksa 28 Sep 2026

Materi

Fungsi yang ditulis dengan async function selalu mengembalikan Promise: nilai yang di-return menjadi isi fulfilled, dan error yang dilempar menjadi penolakan. Di dalamnya, await menghentikan sementara fungsi itu sampai Promise di kanannya selesai, lalu memberi nilainya. Badan fungsi async berjalan seperti fungsi biasa sampai await pertama; sisanya dilanjutkan sebagai microtask setelah Promise itu selesai, dan selama menunggu, bagian program lain tetap berjalan. Bila Promise-nya ditolak, await melempar alasannya seperti throw, sehingga try dan catch dari modul error menangkapnya persis seperti error sinkron. await hanya boleh ditulis di dalam fungsi async atau di tingkat teratas modul.

async function ongkirKe(kota, ambilTarif) {
  try {
    const tarif = await ambilTarif(kota);
    return tarif.perKilo * 2;
  } catch (e) {
    return null; // kota di luar jangkauan
  }
}

await yang ditulis berurutan menunggu satu per satu: pekerjaan kedua baru dimulai setelah yang pertama selesai. Bila beberapa pekerjaan tidak saling bergantung, mulai semuanya dulu lalu tunggu bersama dengan Promise.all. Promise.all fulfilled dengan array hasil sesuai urutan input, bukan urutan selesainya, dan ditolak begitu salah satu isinya ditolak, dengan alasan penolakan pertama itu. Promise.allSettled menunggu semuanya selesai dan memberi satu objek per isi: { status: "fulfilled", value } atau { status: "rejected", reason }. Promise.race selesai mengikuti Promise pertama yang selesai, entah fulfilled atau rejected, dan dipakai untuk memasang batas waktu.

// di dalam fungsi async
const [kurs, tarif] = await Promise.all([ambilKurs(), ambilTarif("Kupang")]);
const hasil = await Promise.allSettled([ambilKurs(), Promise.reject(new Error("putus"))]);
hasil.map((h) => h.status); // ["fulfilled", "rejected"]

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Di dalam fungsi async: const hasil = await Promise.all([Promise.resolve(1), Promise.reject(new Error("putus")), Promise.resolve(3)]); Apa yang terjadi?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke

Tampilkan 1 lagi