DOM Dinamis
Selama ini kita biasanya ngubah elemen yang udah ada di file HTML (misal ganti warna atau ganti teks). Lewat DOM Dinamis, JavaScript bisa bikin elemen HTML baru dari nol secara otomatis lewat kode.
Kenapa nggak ditulis langsung aja di file HTML?
- Di file HTML biasa, tampilannya kaku dan statis.
- Lewat JavaScript, kita bisa bikin elemen baru sesuai aksi user (misal user klik tombol tambah) atau mencetak puluhan data dari database tanpa ngetik tag HTML satu per satu secara manual.
Proses bikin elemen baru di JavaScript kurang lebih selalu ngikutin 4 langkah:
Hasil akhirnya di browser sama persis seperti kita ngetik manual di file HTML:
Praktik Langsung: Fitur Tambah Skill
Biar kelihatan fungsinya di aplikasi nyata, kita gabungin 4 langkah tadi dengan event tombol dan input teks dari user.
Synchronous JavaScript
Secara bawaan, JavaScript ngerjain tugasnya secara Synchronous (berurutan dari atas ke bawah). Baris berikutnya harus nunggu baris sebelumnya kelar.
Masalahnya:
Gimana kalau salah satu baris kode butuh waktu lama? Misalnya minta data ke server luar negeri lewat internet lemot atau data yang ingin diambil jumlahnya ribuan bahkan jutaan.
Asynchronous
Yap betul, Asynchronous adalah jawaban dari pertanyaan sebelumnya. Asynchronous ngebiarin proses yang butuh waktu lama berjalan di latar belakang. Kode baris berikutnya tetap bisa langsung jalan tanpa harus nungguin proses lambat itu beres.
Tulisan nomor 3 muncul duluan karena JavaScript nggak mau buang waktu nungguin setTimeout beres. Hal yang sama berlaku waktu kita ngambil data dari server.
Promise
Operasi asynchronous biasanya dibungkus dalam bentuk Promise. Bayangkan kamu pesan makanan di kasir fast food: kamu dikasih struk pesanan (janji). Makananmu belum ada sekarang, tapi bakal datang nanti.
3 Status Promise:
- Pending: Masih nunggu proses kelar.
- Fulfilled: Janji ditepati (data berhasil didapat) $\rightarrow$ ditangani lewat
.then(). - Rejected: Janji gagal (misal server mati atau kuota habis) $\rightarrow$ ditangani lewat
.catch().
API & Format JSON
API (Application Programming Interface) adalah jembatan komunikasi antar aplikasi. Frontend web kita minta data ke backend via URL yang disebut endpoint.
Misal kita panggil URL:
[https://jsonplaceholder.typicode.com/users]
Server bakal ngirim balik data dalam format JSON (JavaScript Object Notation):
Fetch API
Browser punya fitur bawaan bernama fetch() untuk ngambil data dari internet tanpa perlu reload halaman.
Alur Kerjanya
fetch(url) → Kirim Request → Response → response.json() → Data Siap Pakai
Fetch + DOM
Sekarang gabungin Fetch API sama manipulasi DOM. Data ribuan user dari server bisa kita cetak ke halaman web cuma pakai looping forEach().
Loading & Error Handling
Internet nggak selalu lancar. Kadang server lemot atau kuota user habis. Karena itu, UI wajib ngasih tahu statusnya ke user biar nggak bingung ngeliat layar kosong melompong.
Modern Alternative: async / await
Penulisan .then() berantai kadang bikin kode kelihatan berantakan kalau makin panjang. Di JavaScript modern, ada trik penulisan bernama async/await biar kode asynchronous terbaca rapi mirip kode biasa.
async: Menandai bahwa fungsi ini berjalan di latar belakang.await: Menghentikan langkah di baris itu sementara sampai datanya beres diambil.try...catch: Tempat buat nangkep eror kalau ada request yang gagal.
|
Pembeda |
Gaya Tradisional (.then / .catch) |
Gaya Modern (async/await) |
|---|---|---|
Gaya Penulisan |
Berantai (chaining callbacks) |
Mirip kode sekuensial biasa (synchronous) |
Error Handling |
Menggunakan method .catch() di akhir rantai |
Menggunakan blok standar try...catch |
Keterbacaan |
Masih mudah dipahami untuk proses sederhana, tetapi bisa lebih sulit dibaca jika rantainya panjang |
Umumnya lebih mudah dibaca karena alurnya terlihat linier |
Di Bawah Layar |
Berjalan di atas Promise |
Tetap menggunakan Promise; async/await adalah cara penulisan yang lebih nyaman di atas Promise |
Contoh |
fetch(url).then(...).catch(...) |
const response = await fetch(url) |
Jadi, biasanya pakai yang mana?
Untuk project JavaScript modern, async/await biasanya lebih sering digunakan, terutama ketika terdapat beberapa proses asynchronous karena alurnya lebih mudah dibaca dan dipelihara.
Namun, .then() dan .catch() bukan teknologi lama yang sudah tidak digunakan. Keduanya tetap penting untuk dipahami karena banyak kode JavaScript dan library yang menggunakan Promise chaining.