Materi
Fungsi yang menerima masukan tidak sah punya dua pilihan: mengembalikan nilai khusus seperti null, atau menghentikan jalannya program dengan throw. throw new Error("pesan") menghentikan fungsi saat itu juga dan melompat ke blok catch terdekat di atasnya. Bila tidak ada catch sama sekali, program berhenti dan pesannya tampil di konsol.
Blok try berisi kode yang mungkin gagal. Blok catch (e) menerima objek error-nya, dengan property name (jenis error) dan message (pesannya). Blok finally selalu dijalankan setelah keduanya, baik ada error maupun tidak, sehingga dipakai untuk pekerjaan penutup seperti mematikan indikator memuat.
class SaldoKurangError extends Error {
constructor(kurang) {
super(`Saldo kurang Rp${kurang}`);
this.name = "SaldoKurangError";
this.kurang = kurang;
}
}
function tarik(saldo, n) {
if (n > saldo) throw new SaldoKurangError(n - saldo);
return saldo - n;
}
try {
tarik(50000, 80000);
} catch (e) {
if (!(e instanceof SaldoKurangError)) throw e;
console.log(e.name, e.kurang); // SaldoKurangError 30000
} finally {
console.log("transaksi ditutup");
}Error kustom dibuat dengan class yang mewarisi Error. Constructor-nya memanggil super dengan pesan, lalu mengisi this.name supaya jenisnya terbaca di konsol, dan boleh menambah property lain yang berguna bagi penangkapnya. Di catch, instanceof memisahkan error yang memang diharapkan dari kesalahan program lain. Error yang tidak dikenali dilempar ulang dengan throw e.