Selamat datang di bagian ke-28 dari seri tutorial Pemrograman & Komputer kami! Di bagian ini, kita akan menyelami topik penting dalam pemrograman JavaScript asinkron: penanganan kesalahan (error handling). Setelah mempelajari tentang Asynchronous JavaScript dan Event Loop di bagian sebelumnya, kini saatnya untuk memastikan bahwa kode asinkron kita tangguh dan dapat menangani kesalahan dengan baik.
Prasyarat:
Dalam dunia nyata, bayangkan Anda memesan kopi secara online. Proses pemesanan adalah operasi asinkron. Apa yang terjadi jika terjadi kesalahan? Misalnya, kopi habis, pembayaran gagal, atau koneksi internet terputus? Tanpa penanganan kesalahan yang tepat, aplikasi Anda bisa crash, memberikan pengalaman pengguna yang buruk, atau bahkan kehilangan data.
Dalam kode asinkron, kesalahan dapat terjadi di berbagai tempat: saat membuat promise, saat menunggu promise selesai, atau saat memproses hasilnya. Kita perlu mekanisme untuk menangkap dan menangani kesalahan ini secara efektif.
Mari kita mulai dengan penanganan kesalahan dalam Promises.
.catch()Metode .catch() digunakan untuk menangkap kesalahan yang terjadi dalam rantai promise.
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const success = Math.random() > 0.5;
if (success) {
resolve('Data berhasil diambil!');
} else {
reject('Gagal mengambil data!');
}
}, 1000);
});
}
fetchData()
.then(data => {
console.log(data);
})
.catch(error => {
console.error('Terjadi kesalahan:', error);
});
Penjelasan:
fetchData() mengembalikan promise yang disimulasikan untuk mengambil data setelah satu detik.success adalah true, promise di-resolve dengan pesan keberhasilan. Jika tidak, promise di-reject dengan pesan kesalahan..then() menangani kasus keberhasilan dan mencetak data ke konsol..catch() menangani kasus kesalahan dan mencetak pesan kesalahan ke konsol..finally()Metode .finally() dieksekusi terlepas dari apakah promise di-resolve atau di-reject. Ini berguna untuk melakukan pembersihan atau tindakan akhir lainnya.
fetchData()
.then(data => {
console.log(data);
})
.catch(error => {
console.error('Terjadi kesalahan:', error);
})
.finally(() => {
console.log('Operasi selesai.');
});
Penjelasan:
.finally() selalu dieksekusi setelah .then() atau .catch().Sekarang mari kita lihat bagaimana menangani kesalahan dengan async/await.
try...catchBlok try...catch adalah cara standar untuk menangkap kesalahan dalam fungsi async.
async function fetchDataAsync() {
try {
const data = await fetchData();
console.log('Data:', data);
} catch (error) {
console.error('Terjadi kesalahan:', error);
} finally {
console.log('Operasi selesai.');
}
}
fetchDataAsync();
Penjelasan:
await fetchData()) dalam blok try.catch akan dieksekusi.finally selalu dieksekusi setelah try atau catch.await: Jika Anda lupa menggunakan await di depan promise dalam fungsi async, kesalahan tidak akan ditangkap dengan benar.Modifikasi kode di atas sehingga hanya menangani kesalahan jaringan (misalnya, kesalahan dengan kode status 500) dan membiarkan kesalahan lain ditangani oleh handler kesalahan global.