Cara bermain Fetch Simulasi
- Baca instruksi level dan daftar rute di Server AntarMakan. Di sana tertulis status dan lama balasan tiap rute.
- Tulis isi
async function pesan().fetch,setTimeout, dansetLoadingsudah tersedia. - Timeline request diperbarui setiap kamu mengetik. Bar yang mulai di titik yang sama berarti request-nya berangkat bersamaan.
- Tekan Cek jawaban atau Ctrl + Enter. Yang dicek adalah nilai
returnkodemu dan catatan request-nya: urutan, waktu, dan jumlah percobaan. - 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
await fetch dan res.json()
fetchmemberi objekResponse. Isinya dibaca terpisah denganawait res.json(). - Level 2
res.status
Balasan 404 atau 500 tetap balasan.
fetchtidak melempar error untuk status HTTP. - Level 3
res.ok
truehanya untuk status 200 sampai 299. Cek dulu sebelum memakai isinya. - Level 4
try/catch untuk error jaringan
Kalau request tidak sampai ke server,
fetchgagal denganTypeError. - Level 5
Error HTTP vs error jaringan
Lempar error sendiri saat
!res.ok, lalu bedakan keduanya dicatch. - Level 6
Loading state dan finally
finallyselalu jalan, jadi spinner pasti mati baik request berhasil maupun gagal. - Level 7
Promise.all
Menjalankan beberapa request bersamaan. Total waktunya mengikuti request yang paling lama, bukan jumlahnya.
- Level 8
Promise.allSettled
Menunggu semua request, termasuk yang gagal, lalu melaporkan status masing-masing.
- Level 9
Timeout dengan AbortController
controller.abort()membatalkan request yang memakaisignal-nya, danfetchgagal denganAbortError. - Level 10
Retry dengan jeda
Coba ulang request yang gagal sementara, dengan batas percobaan dan jeda di antaranya.
fetch tidak gagal karena 404
Promise dari fetch hanya reject kalau request tidak sampai ke server: koneksi putus, alamat tidak valid, atau dibatalkan. Balasan 404, 500, atau 503 tetap balasan yang sah, jadi Promise-nya resolve dan catch tidak jalan.
Karena itu pola yang aman adalah if (!res.ok) throw new Error(...) setelah await fetch(...). Dengan begitu satu catch menangkap dua jenis gagal, dan kamu bisa membedakannya lewat err instanceof TypeError.
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.
Apakah kodeku benar-benar mengirim request ke internet?
Tidak. Kodemu jalan di Web Worker di dalam iframe terpisah yang memblokir jaringan. fetch di sana adalah server simulasi milik game, dengan balasan yang sama setiap kali dijalankan.
Kenapa request 5 detik selesai seketika?
Game ini memakai waktu virtual. fetch dan setTimeout maju di jam simulasi, jadi timeline mencatat waktu yang akan terjadi di jaringan sungguhan tanpa kamu harus menunggu.
Kenapa level paralel tetap salah padahal hasilnya benar?
Level itu juga mengecek waktu total. Kalau await fetch ditulis berurutan, request kedua baru berangkat setelah yang pertama selesai. Panggil keduanya dulu, lalu tunggu bersama dengan Promise.all.
Bolehkah memakai AbortSignal.timeout?
Boleh. AbortSignal.timeout(1000) juga mengikuti jam virtual di game ini. Bedanya, error yang muncul bernama TimeoutError, bukan AbortError.