Error Handling — JavaScript

Pernah liat aplikasi yang langsung crash putih total pas ada masalah kecil? Itu app yang gak punya error handling — satu hiccup, semuanya runtuh. App…

Error adalah masalah yang muncul waktu kode sedang jalan, misalnya teks data yang rusak. Kalau dibiarkan, satu error menghentikan semua kode sesudahnya. try...catch menangkap error itu, jadi kamu yang menentukan apa yang terjadi, dan programnya tetap lanjut.

🧪 Tebakan cepat: di dalam try, baris pertama melempar error. Apa baris kedua di try itu masih jalan? Tebak dulu, jawabannya ada di bagian "Tangkap error dengan try...catch".

Tangkap error dengan try...catch

function loadProfile(text) {
  try {
    const user = JSON.parse(text)
    if (!user.name) {
      throw new Error('name wajib diisi')
    }
    console.log('Halo, ' + user.name)
  } catch (error) {
    console.log(error.name + ': ' + error.message)
  } finally {
    console.log('Loader disembunyikan')
  }
}

loadProfile('{"name":"Budi"}')
console.log('Program lanjut')

Dengan '{"name":"Budi"}', yang tercetak Halo, Budi, Loader disembunyikan, lalu Program lanjut. Dengan '{}', name-nya gak ada, jadi throw jalan dan baris Halo dilewati. Yang tercetak Error: name wajib diisi, Loader disembunyikan, Program lanjut. Jawaban tebakan: gak, baris sesudah error di try gak jalan.

Tanpa catch, error-nya lolos keluar fungsi. finally tetap jalan, tapi Program lanjut gak pernah tercetak.

Kembalikan nilai cadangan dari catch

return boleh ditulis di dalam try dan di dalam catch. Kalau try berhasil, nilainya dari try. Kalau gagal, dari catch:

function bacaData(teks) {
  try {
    return JSON.parse(teks)
  } catch (error) {
    return null
  }
}

bacaData('{"kota":"Bandung"}') // { kota: 'Bandung' }
bacaData('[1,2,3]')            // [1, 2, 3]
bacaData('kota Bandung')       // null
bacaData('')                   // null

Biarkan JSON.parse yang menilai teksnya, jangan cek sendiri pakai teks.startsWith('{'). Array [1,2,3] juga JSON yang sah. Teks kosong '' dan object yang terpotong '{"kota":' bukan JSON, jadi dua-duanya bikin JSON.parse melempar error.

Lempar error sendiri dengan throw

JavaScript gak menganggap semua hal aneh sebagai error. 10 / 0 misalnya, hasilnya Infinity, bukan error. Kalau kamu mau itu dianggap salah, cek sendiri lalu lempar error:

function hitungDiskon(persen) {
  if (persen > 100) {
    throw new Error('Diskon maksimal 100 persen')
  }
  return persen / 100
}

try {
  hitungDiskon(150)
} catch (error) {
  console.log(error.message) // Diskon maksimal 100 persen
}

⚠️ Jebakan yang sering ketemu

TL;DR: try berisi kode yang mungkin gagal, catch (error) jalan kalau ada error (pesannya di error.message), dan finally selalu jalan. Baris sesudah error di try dilewati, dan error yang gak ditangkap menghentikan sisa program. return di catch memberi nilai cadangan, misalnya null. Lempar error sendiri pakai throw new Error('pesan'), bukan throw 'pesan'.

Yang akan kamu pelajari