Panduan lengkap Async Programming di JavaScript untuk pengembangan web modern
Async Programming adalah cara untuk menangani operasi yang membutuhkan waktu, seperti fetching data atau membaca file, tanpa memblokir eksekusi kode lainnya.
// Callback
function fetchData(callback) {
setTimeout(() => {
callback('Data fetched!');
}, 1000);
}
// Promise
function fetchDataPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Data fetched with Promise!');
}, 1000);
});
}
// Async/Await
async function fetchDataAsync() {
const data = await fetchDataPromise();
console.log(data);
}
đ Penjelasan Detail:
âĸ Callback
- Fungsi yang dipanggil setelah operasi selesai
âĸ Promise
- Objek yang merepresentasikan hasil (atau kegagalan) dari operasi async
âĸ Async/Await
- Sintaks modern untuk menangani Promise dengan cara yang lebih bersih dan mudah dibaca
// Error Handling with Promises
fetchDataPromise()
.then(data => {
console.log(data);
})
.catch(error => {
console.error(error);
});
// Error Handling with Async/Await
async function fetchDataWithErrorHandling() {
try {
const data = await fetchDataPromise();
console.log(data);
} catch (error) {
console.error(error);
}
}
Async/Await didukung penuh oleh semua browser modern (Chrome 55+, Firefox 52+, Safari 10.1+, Edge 15+).
// Comparison of Async Methods
Callback /* Simple but can lead to "callback hell" */
Promise /* Better than callbacks, but can be verbose */
Async/Await /* Clean and easy to read, modern approach */
// Common Patterns
Promise.all /* Run multiple promises in parallel */
Promise.race /* Resolve/reject as soon as one promise settles */
Promise.allSettled /* Wait for all promises to settle */
đ Penjelasan Detail:
âĸ Callback - Cocok untuk operasi sederhana, tetapi dapat menyebabkan "callback hell"
âĸ Promise - Lebih baik daripada callback, tetapi bisa menjadi verbose
âĸ Async/Await - Pendekatan modern yang bersih dan mudah dibaca
// Using Promise.all
const [data1, data2] = await Promise.all([
fetchDataPromise(),
fetchAnotherDataPromise()
]);
// Using Promise.race
const winner = await Promise.race([
fetchDataPromise(),
fetchAnotherDataPromise()
]);
// Using Promise.allSettled
const results = await Promise.allSettled([
fetchDataPromise(),
fetchAnotherDataPromise()
]);
Promise.all, Promise.race, dan Promise.allSettled didukung penuh oleh semua browser modern (Chrome 32+, Firefox 29+, Safari 8+, Edge 12+).
Gunakan Async/Await untuk kode yang lebih bersih dan mudah dibaca, dan selalu tangani error dengan try/catch.
// â
Good - Clean and readable
async function fetchUserData() {
try {
const user = await fetchUser();
const posts = await fetchPosts(user.id);
console.log(posts);
} catch (error) {
console.error(error);
}
}
// â Avoid - Nested Promises
fetchUser()
.then(user => {
fetchPosts(user.id)
.then(posts => {
console.log(posts);
})
.catch(error => {
console.error(error);
});
})
.catch(error => {
console.error(error);
});
đ Penjelasan Detail:
âĸ Keep it simple - Gunakan Async/Await untuk kode yang lebih bersih
âĸ Avoid nested promises - Hindari "callback hell" dengan Async/Await
âĸ Error handling - Selalu tangani error dengan try/catch
âĸ Parallel execution - Gunakan Promise.all untuk menjalankan beberapa operasi async secara paralel