Cara bermain Promise Antar Jemput
- Baca instruksi level dan papan pangkalan. Di sana tertulis lama tiap perjalanan, perjalanan yang akan gagal, dan jumlah mobil.
- Tulis isi
async function berangkat().jalan(nama)memberangkatkan mobil dan memberi Promise yang resolve dengannamasaat sampai.setTimeoutdanclearTimeoutjuga tersedia. - Timeline diperbarui setiap kamu mengetik. Bar yang bertumpuk di waktu yang sama berarti mobilnya jalan bersamaan, dan di bawahnya tertulis jumlah mobil terbanyak yang jalan sekaligus.
- Tekan Cek jawaban atau Ctrl + Enter. Yang dicek adalah nilai
returndan catatan perjalanan: urutan, waktu total, dan jumlah mobil yang jalan bersamaan. - Kalau buntu, buka Petunjuk. Petunjuk pertama mengarahkan, petunjuk terakhir hampir menjawab.
- Level yang sudah selesai tetap tercentang saat kamu kembali dengan browser yang sama.
Yang kamu pelajari
- Level 1
Promise.race
Selesai dengan Promise pertama yang selesai. Promise lain tetap jalan, hasilnya saja yang diabaikan.
- Level 2
Promise.any
Mengambil Promise pertama yang berhasil dan melewati yang gagal.
- Level 3
AggregateError
Kalau semua gagal,
Promise.anyreject denganAggregateError. Alasan tiap Promise ada dierr.errors. - Level 4
Promise.all dan forEach
forEachtidak menunggu callback async.Promise.allmenunggu semuanya dan mengembalikan hasil urut sesuai array asal. - Level 5
Berurutan dengan for...of
awaitdi dalamfor...ofmenjalankan satu perjalanan sampai selesai sebelum yang berikutnya. - Level 6
Batas konkurensi
Paling banyak N pekerjaan jalan bersamaan. Cara paling sederhana: pecah jadi rombongan berisi N.
- Level 7
Antrean pekerja
N pekerja yang masing-masing mengambil tugas berikutnya begitu kosong, jadi tidak ada yang menunggu pasangannya.
- Level 8
Timeout dengan race
Balapkan pekerjaan dengan Promise yang reject lewat
setTimeout. - Level 9
finally untuk bersih-bersih
clearTimeoutdifinallymembersihkan timer batas waktu, baik pekerjaan selesai maupun telat. - Level 10
Error di dalam antrean
Tangkap error per tugas supaya satu kegagalan tidak menghentikan pekerja lain.
Promise mulai jalan saat dibuat, bukan saat di-await
jalan("Ani") langsung memberangkatkan mobil. await hanya menunggu hasilnya. Karena itu penumpang.map((nama) => jalan(nama)) sudah mengirim semua mobil sekaligus, bahkan sebelum ada Promise.all.
Kombinator seperti race, any, dan all tidak menyalakan atau mematikan perjalanan. Mereka hanya menentukan kapan kamu berhenti menunggu. Untuk membatasi jumlah mobil, kamu harus mengatur kapan jalan(...) dipanggil, misalnya lewat antrean pekerja.
Tanya jawab
Apakah harus daftar akun untuk bermain?
Tidak. Semua level bisa dimainkan tanpa akun. Kemajuanmu disimpan di browser yang kamu pakai, jadi akan hilang kalau data browser dihapus.
Apa beda Promise.race dan Promise.any?
Promise.race ikut hasil Promise pertama yang selesai, termasuk kalau yang pertama itu gagal. Promise.any menunggu Promise pertama yang berhasil, dan baru reject dengan AggregateError kalau semuanya gagal.
Kalau Promise.race sudah selesai, apakah perjalanan lain berhenti?
Tidak. Promise tidak punya cara bawaan untuk dibatalkan, jadi perjalanan yang kalah tetap jalan sampai selesai. Di timeline, perjalanan itu tampil sebagai belum sampai saat fungsimu selesai. Untuk benar-benar membatalkan request, pakai AbortController seperti di Fetch Simulasi.
Kenapa level antrean tetap salah padahal maksimal dua mobil?
Level itu juga mengecek waktu total. Dengan rombongan berdua, mobil yang cepat sampai harus menunggu pasangannya sebelum berangkat lagi. Antrean pekerja membuat tiap mobil langsung mengambil penumpang berikutnya.
Apakah kodeku benar-benar menunggu lima detik?
Tidak. Game ini memakai waktu virtual seperti Fetch Simulasi. jalan dan setTimeout maju di jam simulasi, jadi timeline mencatat waktunya tanpa kamu harus menunggu.