Panduan lengkap penanganan error di JavaScript untuk aplikasi yang lebih robust
Error handling adalah teknik untuk menangani dan merespons error yang terjadi selama eksekusi program. JavaScript menyediakan beberapa mekanisme untuk menangani error secara efektif.
// Try-Catch Block
try {
// Kode yang mungkin menghasilkan error
JSON.parse('{invalid json}');
} catch (error) {
console.error('Terjadi error:', error.message);
}
// Throw Error
function divide(a, b) {
if (b === 0) {
throw new Error('Pembagian dengan nol tidak diperbolehkan');
}
return a / b;
}
đ Penjelasan Detail:
âĸ try-catch
- Blok untuk menangkap dan menangani error
âĸ throw
- Melempar error secara manual
âĸ Error
- Constructor untuk membuat objek error
âĸ finally
- Blok yang selalu dijalankan setelah try/catch
âĸ error.message
- Property yang berisi pesan error
// Custom Error
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = 'ValidationError';
}
}
// Error Handling di Async/Await
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Gagal mengambil data');
}
return await response.json();
} catch (error) {
console.error('Error fetch:', error);
throw error; // Re-throw error
}
}
JavaScript memiliki beberapa tipe error bawaan: SyntaxError, ReferenceError, TypeError, RangeError, URIError, dan EvalError.
// Tipe Error dan Penyebabnya
SyntaxError // Kode JavaScript tidak valid
ReferenceError // Referensi ke variabel/fungsi yang tidak ada
TypeError // Operasi pada tipe data yang salah
RangeError // Nilai di luar rentang yang valid
URIError // Parameter fungsi encode/decode URI tidak valid
EvalError // Error terkait fungsi eval() (tidak digunakan lagi)
// Property Objek Error
error.name // Nama error (misal: "TypeError")
error.message // Pesan error deskriptif
error.stack // Stack trace (debugging)
đ Penjelasan Detail:
âĸ SyntaxError - Terjadi saat ada kesalahan sintaks dalam kode
âĸ ReferenceError - Saat mencoba mengakses variabel/fungsi yang tidak terdefinisi
âĸ TypeError - Operasi pada tipe data yang tidak sesuai (misal memanggil null sebagai fungsi)
âĸ Error Custom bisa dibuat dengan extend class Error untuk kasus spesifik
âĸ Stack trace membantu melacak sumber error dalam kode
// Error Boundaries (React)
class ErrorBoundary extends React.Component {
componentDidCatch(error, info) {
logErrorToService(error, info.componentStack);
}
render() {
return this.props.children;
}
}
// Global Error Handling
window.addEventListener('error', (event) => {
sendErrorToAnalytics(event.error);
});
// Promise Rejection Handling
window.addEventListener('unhandledrejection', (event) => {
console.error('Unhandled rejection:', event.reason);
});
Error Boundaries di React menangkap error di komponen child. Global error handler menangkap error yang tidak tertangkap. Unhandled rejection handler untuk Promise yang gagal.
Tangkap error secara spesifik, gunakan custom error untuk domain bisnis, log error untuk debugging, dan beri feedback yang jelas ke pengguna.
// â
Good - Error handling spesifik
try {
processUserInput(input);
} catch (error) {
if (error instanceof ValidationError) {
showUserMessage(error.message);
} else {
logError(error);
showGenericError();
}
}
// â Avoid - Menangkap semua error secara generik
try {
someOperation();
} catch (error) {
console.log('Terjadi error');
}
// â
Better - Error handling di async/await
async function loadData() {
try {
const data = await fetchData();
return process(data);
} catch (error) {
handleDataError(error);
throw error; // Re-throw untuk penanganan lebih lanjut
}
}
đ Penjelasan Detail:
âĸ Tangkap error secara spesifik - Gunakan instanceof untuk membedakan tipe error
âĸ Gunakan custom error - Buat kelas error khusus untuk domain aplikasi
âĸ Log error - Catat error untuk keperluan debugging dan monitoring
âĸ Beri feedback - Tampilkan pesan yang bermakna untuk pengguna
âĸ Jangan menelan error - Re-throw error yang tidak bisa ditangani dengan benar
âĸ Gunakan finally - Untuk kode pembersihan yang harus selalu dijalankan
Beberapa tools populer untuk error handling: Sentry (error tracking), Bugsnag, Rollbar, dan LogRocket untuk reproduksi error.
đ Sumber Belajar Lanjutan:
âĸ MDN Error Handling - Dokumentasi resmi Mozilla
âĸ JavaScript.info Error Handling - Tutorial komprehensif
âĸ Node.js Error Handling - Best practices untuk backend
âĸ Error Handling in Async/Await - Pola untuk kode async
âĸ Production Error Monitoring - Tools untuk aplikasi production