Handle Error di Promise.catch()

Baru sempat baca lebih lanjut tentang error handling di Promise Javascript. Agak ketinggalan sih, karena ini masalah sudah ada dari 2 tahun-an lalu, tapi gak apa, baru fokus ke Javascript setahun terakhir, dan anyway agak susah juga cari artikel yang bahas ini pake Bahasa Indonesia jadi saya tulis aja disini.

Mungkin teman-teman pernah dengar, kalo kita throw-ing error di resolve function atau di then function, maka Error itu akan otomatis menjadi Rejection ? Contoh:

Output yang akan keluar kira-kira seperti berikut:

Artinya, tidak perlu khawatir jika ada typo atau programmer error yang lain di block function then.

Pada awalnya saya kira thencatch ini sama dengan trycatch. Ternyata nggak sama sekali. Baru saya ketahui setelah saya test error di block catch:

Yang saya harapkan adalah muncul ReferenceError: x not defined. Tetapi nggak, malah silent error. Dan ini bahaya sekali. Kenapa silent Error ? Ini by design, karena setiap error akan otomatis jadi `Rejection` dan di teruskan ke resolver/rejector selanjutnya, maka kita harus menambah block catch lagi:

Bagaimana kalo kita typo lagi di block catch yang ke-2 ? ke-3 dan seterusnya ?

Lalu saya googling sedikit dan dapet solusinya, sebagai berikut.

Kita bisa menuliskan kode diatas sebelum kode javascript kita yang lainnya. Sekian.

Referensi:
http://jamesknelson.com/are-es6-promises-swallowing-your-errors/
https://gist.github.com/benjamingr/0237932cee84712951a2
https://stackoverflow.com/questions/29689143/trap-when-js-unhandled-rejections/29689261

Discussion