Skip to content

Instantly share code, notes, and snippets.

@nnivxix
Last active July 18, 2022 17:10
Show Gist options
  • Select an option

  • Save nnivxix/6be1aaaa571acf6a6f21f817d22bcf99 to your computer and use it in GitHub Desktop.

Select an option

Save nnivxix/6be1aaaa571acf6a6f21f817d22bcf99 to your computer and use it in GitHub Desktop.
Error Handling JavaScript
try {
console.log("Awal blok try"); // (1)
errorCode; // (2) skip and jump to error
console.log("Akhir blok try"); // (3)
} catch (error) {
console.log("Terjadi error!");
console.log(error.message); // (4)
console.log( error.name);
// console.log( error.stack)
}
/* output
Awal blok try
Terjadi error!
errorCode is not defined
ReferenceError
*/
/**
* Saat ini, Anda sudah memiliki fungsi detectTriangle yang berguna untuk
* mendeteksi jenis segitiga berdasarkan nilai argumen.
* Contoh:
* - 1, 1, 1 -> Segitiga sama sisi
* - 4, 4, 2 -> Segitiga sama kaki
* - 3, 4, 6 -> Segitiga sembarang
*
* Namun fungsi detectTriangle belum berjalan dengan baik karena
* bila ada argumen fungsi yang bukan number, alih-alih error, ia akan mengembalikan "Segitiga sembarang".
* Contoh:
* - 1, false, 1 -> Segitiga sembarang
* - 'a', 3, 5 -> Segitiga sembarang
* - 12, 2, null -> Segitiga sembarang
* Kondisi yang diharapkan:
* - 1, false, 1 -> Argumen kedua harus number
* - 'a', 3, 5 -> Argumen pertama harus number
* - 12, 2, null -> Argumen ketiga harus number
*
* Tugas Anda adalah memperbaiki fungsi detectTriangle agar berjalan dengan kondisi yang diharapkan.
* Pastikan Anda menggunakan teknik Throwing dan Handling Error yah.
*
* TODO 1:
* - Buatlah class ValidationError yang merupakan custom error dengan spesifikasi berikut:
* - Turunan dari class Error
* - Memiliki constructor(message)
* - this.name harus bernilai "ValidationError"
*
* TODO 2:
* - Buatlah fungsi validateNumberInput yang memvalidasi 3 buah input (argumen) dengan spesifikasi berikut:
* - Menerima 3 argumen
* - Bila argumen pertama bukan number:
* - throw ValidationError dengan pesan 'Argumen pertama harus number'
* - Bila argumen kedua bukan number:
* - throw ValidationError dengan pesan 'Argumen kedua harus number'
* - Bila argumen ketiga bukan number:
* - throw ValidationError dengan pesan 'Argumen ketiga harus number'
*
* TODO 3:
* - Panggil fungsi validateNumberInput di dalam fungsi detectTriangle untuk memvalidasi nilai argumen a, b, dan c.
* - pastikan Anda memanggil validateNumberInput menggunakan try .. catch.
* - bila block catch terpanggil, kembalikan fungsi detectTriangle dengan pesan error yang dibawa fungsi validateNumberInput.
*/
// TODO 1
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = "ValidationError";
}
}
// TODO 2
function validateNumberInput(a,b,c){
if (typeof(a) !== 'number') {
throw new ValidationError('Argumen pertama harus number')
} else if (typeof(b) !== 'number') {
throw new ValidationError('Argumen kedua harus number')
} else if (typeof(c) !== 'number') {
throw new ValidationError('Argumen ketiga harus number')
}
return;
}
const detectTriangle = (a, b, c) => {
// TODO 3
try {
validateNumberInput(a,b,c);
if (a === b && b === c) {
return 'Segitiga sama sisi';
}
if (a === b || a === c || b === c) {
return 'Segitiga sama kaki';
}
return 'Segitiga sembarang';
} catch (error) {
return error.message;
}
};
/**
* Jangan hapus kode di bawah ini
*/
module.exports = { ValidationError, validateNumberInput, detectTriangle };
console.log(detectTriangle(1,1,'4hy')); // Argumen ketiga harus number

Object error

ObjectError memiliki beberapa properti utama di dalamnya, yaitu:

  1. name : Nama error yang terjadi.
  2. message : Pesan tentang detail error.
  3. stack : Informasi urutan kejadian yang menyebabkan error. Umumnya digunakan untuk debugging karena terdapat informasi baris mana yang menyebabkan error.

try-catch-finally

Blok finally akan dieksekusi mau bagaimanapun hasilnya entah gagal atau berhasil akan tetap dirender.

try {
console.log("Awal blok try");
console.log("Akhir blok try");
} catch (error) {
console.log("Baris ini diabaikan");
} finally {
console.log("Akan tetap dieksekusi");
}
/* Output
Awal blok try
Akhir blok try
Akan tetap dieksekusi
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment