Memperbaiki Error ‘Unhandled Promise Rejection’ di Node.js

dani indra

Memperbaiki Error ‘Unhandled Promise Rejection’ di Node.js

Error ‘Unhandled Promise Rejection’ adalah jenis kesalahan yang umum di Node.js dan seringkali muncul ketika terjadi penolakan (rejection) pada janji (promise) yang tidak ditangani. Dalam artikel ini, kita akan membahas penyebab umum dari error ini dan cara memperbaikinya.

Apa itu ‘Unhandled Promise Rejection’?

Sebuah promise di JavaScript dapat berada dalam dua keadaan: terpenuhi (fulfilled) atau ditolak (rejected). Jika suatu promise ditolak dan tidak ada penanganan (handling) yang dilakukan, maka akan muncul error ‘Unhandled Promise Rejection’.

// Contoh promise yang ditolak tanpa penanganan
const myPromise = new Promise((resolve, reject) => {
  reject(new Error('Ini adalah pesan error.'));
});

// Ini akan menyebabkan 'Unhandled Promise Rejection'

Penyebab Umum Error ‘Unhandled Promise Rejection’

  1. Tidak Ada Penanganan pada Promise:
    Jika sebuah promise ditolak dan tidak ada blok catch atau metode .catch() yang menangani penolakan tersebut, error ini akan muncul.
   const myPromise = new Promise((resolve, reject) => {
     reject(new Error('Ini adalah pesan error.'));
   });

   // Tidak ada penanganan, akan menyebabkan 'Unhandled Promise Rejection'
  1. Penanganan Tertunda:
    Terkadang, penanganan promise ditunda dan oleh karena itu, tidak dapat menangkap penolakan secara tepat waktu.
   const myPromise = new Promise((resolve, reject) => {
     setTimeout(() => {
       reject(new Error('Ini adalah pesan error.'));
     }, 1000);
   });

   // Penanganan ditunda, akan menyebabkan 'Unhandled Promise Rejection'

Cara Memperbaiki Error ‘Unhandled Promise Rejection’

  1. Tambahkan Blok catch atau Metode .catch():
    Pastikan untuk selalu menambahkan blok catch atau metode .catch() setelah promise untuk menangani penolakan.
   const myPromise = new Promise((resolve, reject) => {
     reject(new Error('Ini adalah pesan error.'));
   });

   myPromise.catch((error) => {
     console.error('Terjadi kesalahan:', error.message);
   });
  1. Gunakan Blok try-catch di Fungsi Asinkron:
    Jika Anda berurusan dengan fungsi asinkron, gunakan blok try-catch untuk menangkap penolakan.
   async function myAsyncFunction() {
     try {
       await doSomethingAsync();
     } catch (error) {
       console.error('Terjadi kesalahan:', error.message);
     }
   }
  1. Gunakan Metode .finally():
    Metode .finally() dapat digunakan untuk menetapkan blok kode yang akan dijalankan setelah promise selesai, baik itu terpenuhi atau ditolak.
   const myPromise = new Promise((resolve, reject) => {
     reject(new Error('Ini adalah pesan error.'));
   });

   myPromise
     .then((result) => {
       // Penanganan ketika promise terpenuhi
     })
     .catch((error) => {
       console.error('Terjadi kesalahan:', error.message);
     })
     .finally(() => {
       console.log('Akan dijalankan setelah promise selesai.');
     });
  1. Gunakan Event 'unhandledRejection':
    Node.js menyediakan event 'unhandledRejection' yang dapat Anda gunakan untuk menangani penolakan global.
   process.on('unhandledRejection', (reason, promise) => {
     console.error('Unhandled Rejection at:', promise, 'reason:', reason);
     // Lakukan sesuatu, misalnya: kirim ke log atau sistem pemantauan kesalahan
   });
  1. Aktifkan Opsi 'strict' pada Promise:
    Aktifkan opsi 'strict' pada promise untuk menghasilkan error segera jika ada promise yang tidak ditangani.
   // Aktifkan opsi 'strict' pada promise
   node --unhandled-rejections=strict app.js

Dengan menerapkan langkah-langkah di atas, Anda dapat memastikan bahwa Anda menangani penolakan promise dengan benar, dan menghindari munculnya error ‘Unhandled Promise Rejection’ di aplikasi Node.js Anda. Selalu periksa dan tanggapi penolakan promise dengan baik sesuai dengan logika aplikasi Anda.

Leave a Comment