Halo, Developer yang Lagi Cari Kedamaian Kode!
(Karena Kita Semua Pantas Mendapatkan Kode yang Rapih dan Tenang)
Callback itu bagus. Dia membantu Node.js jadi asinkron dan nggak gampang "macet". Tapi, kalau callback dipakai terlalu banyak, jadilah Callback Hell: kode yang berlapis-lapis kayak lasagna, tapi nggak enak dibaca.
Solusinya? Promises dan Async/Await!
Mari kita bahas dua pahlawan ini dengan gaya santai dan sedikit humor. Karena belajar hal baru harus seru, bukan bikin frustasi. 😜
1. Apa Itu Promise?
Promise adalah janji. Ya, janji! Kayak janji teman kamu yang bilang, "Besok gue bayar utang." Tapi, di dunia nyata, janji itu ada tiga kemungkinan:
- Dipenuhi (fulfilled): Dia benar-benar bayar utangnya.
- Ditolak (rejected): Dia bilang, "Sorry, gue nggak punya uang."
- Pending: Dia bilang, "Nanti ya," tapi nggak kasih kepastian kapan.
Promise di Node.js juga begitu. Dia menjanjikan hasil di masa depan, entah sukses atau gagal.
Contoh Promise Sederhana:
const janjiMakan = new Promise((resolve, reject) => {
const lapar = true;
if (lapar) {
resolve("Aku beliin kamu nasi goreng!");
} else {
reject("Maaf, aku lagi kenyang. Beli sendiri, ya!");
}
});
janjiMakan
.then((hasil) => console.log(hasil)) // Kalau janji terpenuhi
.catch((error) => console.error(error)); // Kalau janji gagal
Output:
- Kalau lapar: "Aku beliin kamu nasi goreng!"
- Kalau nggak lapar: "Maaf, aku lagi kenyang. Beli sendiri, ya!"
2. Kelebihan Promise dibanding Callback
Kenapa Promise lebih disukai dibanding callback?
- Lebih Rapi: Promise nggak bikin kode kamu jadi nested kayak labirin.
- Error Handling yang Lebih Mudah: Semua error bisa ditangkap di satu tempat.
- Bisa Digabung: Kamu bisa "berantai" beberapa Promise tanpa sakit kepala.
3. Async/Await: Lebih Elegan daripada Promise
Kalau Promise itu keren, maka Async/Await adalah versi dewanya. Dengan Async/Await, kode kamu jadi terlihat sinkron, meskipun sebenarnya tetap asinkron.
Contoh Async/Await:
Bayangkan kamu bikin fungsi yang janji bakal balikin data:
const janjiData = () => {
return new Promise((resolve) => {
setTimeout(() => resolve("Data berhasil diambil!"), 2000);
});
};
// Pakai Async/Await
const ambilData = async () => {
console.log("1. Sedang mengambil data...");
const hasil = await janjiData();
console.log("2. Ini hasilnya:", hasil);
};
ambilData();
Output:
1. Sedang mengambil data...
(2 detik kemudian)
2. Ini hasilnya: Data berhasil diambil!
Lihat? Lebih enak dibaca, kan? Kayak cerita linear yang jelas alurnya.
4. Bedanya Promise dan Async/Await
Promise | Async/Await |
---|---|
Pakai .then() dan .catch() untuk menangani hasil. |
Pakai await untuk nunggu hasil. |
Masih agak ribet kalau Promises berantai. | Jadi terlihat seperti kode sinkron. |
Cocok untuk yang suka drama. | Cocok untuk yang suka ketenangan. |
5. Contoh Kasus Nyata: Membaca File
Dengan Callback:
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) return console.error("Error membaca file:", err);
console.log("Isi file:", data);
});
Dengan Promise:
const fs = require('fs').promises;
fs.readFile('file.txt', 'utf8')
.then((data) => console.log("Isi file:", data))
.catch((err) => console.error("Error membaca file:", err));
Dengan Async/Await:
const fs = require('fs').promises;
const bacaFile = async () => {
try {
const data = await fs.readFile('file.txt', 'utf8');
console.log("Isi file:", data);
} catch (err) {
console.error("Error membaca file:", err);
}
};
bacaFile();
6. Menggabungkan Banyak Promise
Promise Berantai:
janjiPertama()
.then((hasil1) => janjiKedua(hasil1))
.then((hasil2) => janjiKetiga(hasil2))
.then((hasil3) => console.log("Hasil akhir:", hasil3))
.catch((error) => console.error("Error:", error));
Async/Await:
const prosesSemua = async () => {
try {
const hasil1 = await janjiPertama();
const hasil2 = await janjiKedua(hasil1);
const hasil3 = await janjiKetiga(hasil2);
console.log("Hasil akhir:", hasil3);
} catch (error) {
console.error("Error:", error);
}
};
prosesSemua();
7. Kesimpulan: Kapan Pakai Apa?
- Pakai Callback: Kalau tugasnya super sederhana dan nggak berlapis-lapis.
- Pakai Promise: Kalau tugasnya kompleks, tapi kamu masih nyaman dengan
.then()
dan.catch()
. - Pakai Async/Await: Kalau kamu mau kode yang terlihat simpel dan lebih mudah dipahami.
Intinya?
Hidup terlalu singkat untuk nulis kode yang bikin pusing. Jadi, pilihlah alat yang membuat kode kamu lebih bersih, mudah dibaca, dan tentunya, bikin kamu tetap waras.
Selamat mencoba Promise dan Async/Await, dan jangan lupa, janji adalah utang… bahkan di Node.js. 😜
0 Comments