forked from uciharis/dicoding-JS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path12a-throwError.js
executable file
·87 lines (78 loc) · 2.97 KB
/
12a-throwError.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//mari kita lihat implementasi try-catch pada kasus yang lebih umum
let json = '{"nama": "yoda", "umur":20}';
{try{
let user = JSON.parse(json);
console.log(user.nama);
console.log(user.umur);
} catch (error){
console.log(error.name);
console.log(error.message);
} }// fungsi JSON.parse melakukan parse atau konversi dari variabel json (string)
// ke sebuah objek. skenario diatas banyak ditemui ketika melakukan request ke API.
// jika json string tidak sesuai dg format objek JS ?
{let json = '{ bad json }';
try {
let user = JSON.parse(json);
console.log(user.nama);
console.log(user.umur);
} catch (error) {
console.log(error.name);
console.log(error.message);
} }// output : SyntaxError Unexpected token b in JSON at position 2
// json tidak sesuai format, JSON.parse akan menimbulkan eror dan ditangkap
// oleh catch dan kode dieksekusi
// bagaimana jika json seperti ini ?
{let json = '{ "umur": 20 }';
try {
let user = JSON.parse(json);
console.log(user.name); // undefined
console.log(user.age); // 20
} catch (error) {
console.log(error.name);
console.log(error.message);
} }// secara sintaksis, kode tidak eror sehingga blok catch akan diabaikan
// namun tidak ada properti name pada json sehingga menimbulkan eror
// utk mengatasainya kita menggunakan throw.
// operator throw akan melemparkan eror pada program shg dieksekusi masuk ke blok catch
//berikut implementasinya
{let json = '{"umur": 20}';
try {
let user = JSON.parse(json);
if (!user.nama) { // jika user.name tidak ada pada json
throw new SyntaxError("'nama' is required");
}
console.log(user.nama); //undefined
console.log(user.umur);
} catch {
console.log(`JSON Error: ${error.message}`);
} }// output : JSON Error : 'nama' is required
// skarang kita telah mengetahui ada banyak kemungkinan eror yang bs muncul dalam sebuah program
// tentunya sangat membantu kita memberikan pesan yang sesuai kepada pengguna atau diri sendiri
// anggaplah json sudah sesuai tetapi ada eror lain yang terjai misal karna variabel belum terdefinisi
{let json = '{"name" : "yodaa", "umur" : 21}';
try {
let user = JSON.parse(json);
if (!user.name) {
throw new SyntaxError(" 'name' is required");
}
errorCode;
console.log(user.name); //Yoda
console.log(user.age); //21
} catch (error){
console.log(`Json Error : ${error.message}`);
}}// output : JSON Error : errorCode is not defined
// error behasil ditangani, tetapi konsol tetap menampilkan pesan diatas,
// lalu bagaimana menampilkan pesan error yang sesuai?
// gunakan if statement
{try {
// ...
} catch (error) {
if (error instanceof SyntaxError) { //dengan instanceOf kita bs mendapatkan tipe error yg terjadi
console.log(`JSON Error: ${error.message}`);
} else if (error instanceof ReferenceError) {
console.log(error.message);
} else {
console.log(error.stack);
}
}}
// sehingga kita bs membuat percabangan bagaimana cara menangani error nya