Blogger Jateng

Promises: Mengelola Kode Asinkron di ES6

Penanganan kode asinkron yang baik sangat diperlukan dalam pengembangan JavaScript modern.Promises diperkenalkan di ES6 untuk menangani kerumitan yang muncul dalam mengelola tugas asinkron, agar kode lebih mudah dibaca dan dipelihara. Pada artikel ini, kita akan melihat Promises, cara kerjanya, dan mengapa Promises menjadi salah satu pilar pemrograman JavaScript.

Masalah dengan Callback

Kursus Bootcamp Javascript Premium Sebelum Promises Dalam JavaScript, Callback adalah cara utama untuk menangani Operasi Asinkron.Cara ini berhasil, tetapi sering kali menyebabkan apa yang disebut sebagai neraka callback, di mana callback bersarang membuat kode menjadi sulit untuk dibaca dan dipelihara. Sebagai contoh:

fs.readFile('file1.txt', (err, data1) => {

    if (err) throw err;

    fs.readFile('file2.txt', (err, data2) => {

        if (err) throw err;

        console.log(data1 + data2);

    });

});

Dalam kasus ini, struktur bersarang membuat kode menjadi lebih sulit untuk dipahami, dan penanganan kesalahan menjadi membosankan. Promises diperkenalkan sebagai solusi untuk masalah ini, menawarkan cara yang lebih bersih untuk menangani kode asinkron.

sumber: soaltekno.lokercepat.id

Apa yang dimaksud dengan Promises?

Promises adalah sebuah objek yang berarti hasil yang berhasil (atau tidak) di masa depan dari sebuah operasi asinkron dan nilainya.Promises dapat berada dalam salah satu dari tiga status:

  1. Tertunda: Keadaan pertama, yang tidak dipenuhi atau ditolak.
  2. Terpenuhi: Operasi berhasil diselesaikan dan nilainya tersedia.
  3. Gagal: Operasi gagal karena ada alasan (kesalahan) yang tersedia.

Mereka menawarkan manfaat seperti perantaian operasi yang lebih baik dan penanganan kesalahan yang lebih elegan, menjadikannya sebuah langkah besar dari callback yang lama.

Membuat dan Menggunakan Promise

Promise dibuat menggunakan konstruktor Promise dengan mengoper sebuah fungsi. Fungsi ini membutuhkan dua parameter: resolve dan reject. Berikut ini sebuah contoh:

const myPromise = new Promise((resolve, reject) => {

    let success = true;


    if (success) {

        resolve("Operation successful!");

    } else {

        reject("Operation failed.");

    }

});

Mengkonsumsi Promise

Promises menyediakan metode then() dan catch() untuk menangani transaksi yang diselesaikan atau ditolak.

myPromise

    .then((message) => {

        console.log(message);

    })

    .catch((error) => {

        console.error(error);

    });

Metode then(), dipanggil ketika janji dipenuhi dan metode catch() digunakan untuk menangani penolakan. Dengan merantai metode-metode ini, kita dapat menjalankannya satu demi satu secara asinkron:

fetch('https://api.example.com/data')

    .then((response) => response.json())

    .then((data) => console.log(data))

    .catch((error) => console.error('Error:', error));

Manfaat Promises

  1. Keterbacaan: Promises mengurangi kebutuhan akan pemanggilan balik yang bersarang dalam, sehingga menghasilkan kode yang lebih bersih dan mudah dibaca.
  2. Penanganan Kesalahan: Penanganan kesalahan terpusat dengan. catch() memungkinkan debugging dan penanganan kesalahan yang lebih terstruktur.
  3. Perangkaian: Anda dapat merantai Promises, yang memungkinkan Anda untuk mengeksekusi beberapa operasi asinkron secara berurutan.
  4. Komposisi: Promise. all() dan Promise. race() membuat pengelolaan beberapa janji menjadi lebih sederhana.

Contoh: Promise.all

Promise.all() menunggu semua janji dalam sebuah iterable untuk diselesaikan atau ditolak:

const promise1 = Promise.resolve(3);

const promise2 = 42;

const promise3 = new Promise((resolve, reject) => {

    setTimeout(resolve, 100, 'foo');

});


Promise.all([promise1, promise2, promise3]).then((values) => {

    console.log(values); // [3, 42, 'foo']

});

Transisi ke Async/Await

Salah satu fitur yang paling menarik dari ES8 adalah async/await, yang dibangun di atas konstruk Promise dan memberikan sintaks yang terlihat lebih sinkron (sampai tentu saja Anda memperkenalkan async). Dengan menggunakan async/await, contoh pengambilan sebelumnya akan terlihat seperti ini:

async function fetchData() {

    try {

        const response = await fetch('https://api.example.com/data');

        const data = await response.json();

        console.log(data);

    } catch (error) {

        console.error('Error:', error);

    }

}


fetchData();

async/await memungkinkan untuk menulis kode asinkron yang mudah dibaca dan dipelihara, sambil mempertahankan fleksibilitas Promises.

Kesimpulan

Promise - mengubah cara pengembang menangani operasi asinkron karena menyediakan cara yang jauh lebih bersih dan mudah dikelola untuk menangani pemanggilan asinkron dalam JavaScript dibandingkan dengan callback. Promise sangat penting untuk pengembangan JavaScript modern dengan kemampuan untuk merantai operasi, memusatkan penanganan kesalahan, dan bekerja dengan mulus dengan fitur-fitur yang lebih baru seperti asinkronisasi/tunggu! Menggunakan Promises secara efektif dapat membantu Anda menulis kode asinkron yang lebih mudah dibaca, dipelihara, dan di-debug.

 kembali ke>>>>  Memahami ES6: Fitur Baru dalam JavaScript