Promises pada Node.js - Perwira Learning Center

 

1. Latar Belakang

    Dalam pengembangan aplikasi menggunakan Node.js, kita sering berhadapan dengan proses asynchronous seperti membaca file, mengambil data dari database, atau melakukan request ke server.

    Awalnya, Node.js menggunakan Callback Pattern untuk menangani proses asynchronous. Namun, jika callback digunakan terlalu banyak dan bersarang (nested), kode menjadi sulit dibaca. Masalah ini sering disebut sebagai callback hell.

    Untuk mengatasi hal tersebut, diperkenalkan konsep Promise di JavaScript (ES6). Promise membuat kode asynchronous menjadi lebih terstruktur, lebih mudah dibaca, dan lebih mudah dalam menangani error.

Karena itu, memahami Promise sangat penting bagi developer Node.js modern.


2. Alat dan Bahan

  • Browser 
  • OS (Windows atau Linux atau MacOS)
  • Code Editor (VSCODE)
  • Node.js


3. Pembahasan

    3.1 Apa itu Promise?

Promise adalah objek yang merepresentasikan hasil dari proses asynchronous yang mungkin:

  • Berhasil (fulfilled)

  • Gagal (rejected)

  • Masih berjalan (pending)

Struktur dasar Promise:

  const janji = new Promise((resolve, reject) => {
  let berhasil = true;

  if (berhasil) {
    resolve("Proses berhasil!");
  } else {
    reject("Proses gagal!");
  }
});

Untuk menangani hasilnya, kita menggunakan .then() dan .catch():

  const janji = new Promise((resolve, reject) => {
  janji
  .then((hasil) => {
    console.log(hasil);
  })
  .catch((error) => {
    console.log(error);
  });


3.2 Promise pada operasi asynchronous

Contoh penggunaan Promise pada pembacaan file:


  const fs = require("fs").promises;

fs.readFile("data.txt", "utf8")
  .then((data) => {
    console.log("Isi file:", data);
  })
  .catch((err) => {
    console.log("Terjadi kesalahan:", err);
  });


Di sini:

  • Jika berhasil → masuk ke .then()

  • Jika error → masuk ke .catch()

Kode menjadi lebih rapi dibanding callback bersarang.


    3.3 Chaining Promise

Salah satu keunggulan Promise adalah bisa dirantai (chaining).

Contoh:


  function langkah1() {
  return Promise.resolve("Langkah 1 selesai");
}

function langkah2() {
  return Promise.resolve("Langkah 2 selesai");
}

langkah1()
  .then((hasil1) => {
    console.log(hasil1);
    return langkah2();
  })
  .then((hasil2) => {
    console.log(hasil2);
  })
  .catch((err) => {
    console.log("Error:", err);
  });

Dengan chaining, kode lebih terstruktur dan tidak menumpuk seperti callback hell.


    3.4 Promise.all()

Jika kita ingin menjalankan beberapa Promise sekaligus:


  const p1 = Promise.resolve("Data 1");
const p2 = Promise.resolve("Data 2");

Promise.all([p1, p2])
  .then((hasil) => {
    console.log(hasil);
  })
  .catch((err) => {
    console.log(err);
  });

Promise.all() akan berhasil jika semua Promise berhasil. Jika satu gagal, semuanya dianggap gagal.


    3.5 Kelebihan dan Kekurangan Promise

Kelebihan:

  • Kode lebih rapi dibanding callback

  • Mudah melakukan chaining

  • Error handling lebih terstruktur

Kekurangan:

  • Tetap bisa menjadi kompleks jika terlalu banyak chaining

  • Membutuhkan pemahaman konsep asynchronous yang baik


4. Kesimpulan

    Promise adalah solusi modern untuk menangani proses asynchronous di Node.js. Dengan Promise, kode menjadi lebih mudah dibaca, lebih terstruktur, dan lebih mudah dalam menangani error dibandingkan callback biasa.

Memahami Promise sangat penting sebelum belajar konsep yang lebih modern seperti async/await, karena async/await sebenarnya dibangun di atas Promise.

Bagi developer yang ingin serius mendalami Node.js, Promise adalah salah satu fondasi utama dalam pemrograman asynchronous modern.