Penjelasan Janji JavaScript: lalu, tangkap, Janji.semua, dan Kesalahan Umum

  1. Beranda
  2. Blog
  3. Pengembangan Perangkat Lunak

Pengembangan Perangkat Lunak

Penjelasan Janji JavaScript: lalu, tangkap, Promise.all, dan Kesalahan Umum

Janji adalah cara JavaScript menangani pekerjaan yang selesai nanti, dan async/await dibangun di atasnya. Pelajari bagaimana mereka sebenarnya berperilaku, dengan keluaran nyata dari setiap contoh, dan hindari kesalahan yang menelan kesalahan Anda.

10 menit baca
Janji JavaScript menjelaskan: lalu, tangkap, Janji.semua, dan kesalahan umum

Poin penting

  • janji adalah objek yang mewakili hasil yang akan tersedia nanti.
  • Hal ini menunggu sampai dipenuhi atau ditolak, dan setelah diselesaikan tidak pernah berubah.
  • Masing-masing then mengembalikan janji baru, yang memungkinkan terjadinya rangkaian.
  • Gunakan Promise.all ketika setiap hasil diperlukan, dan Promise.allSettled ketika Anda menginginkan setiap hasil.

Permintaan jaringan, pembacaan file, dan pengatur waktu semuanya selesai nanti, namun JavaScript tidak bisa berhenti begitu saja dan menunggu, atau halaman akan terhenti. JavaScript janji memberi Anda cara yang rapi untuk mengatakan “setelah ini selesai, lakukan itu, dan jika gagal, lakukan ini.”

Bahkan jika Anda kebanyakan menulis async dan await, Anda menggunakan janji di bawahnya, jadi memahaminya membuat proses debug jauh lebih mudah. Kami menjalankan contoh ini di Node.js 24, dan output yang ditampilkan berasal dari proses tersebut. Mereka berperilaku sama di browser modern.

Apa itu janji?

Janji adalah pengganti nilai masa depan. Bayangkan bel yang diberikan restoran kepada Anda saat Anda memesan. Anda belum mempunyai makanan, tetapi Anda memegang sesuatu yang akan memberi tahu Anda kapan makanan itu sudah siap, atau bahwa ada masalah, dan sementara itu Anda bebas melakukan hal-hal lain.

Dalam kode, fungsi asinkron segera mengembalikan janji, dan Anda melampirkan apa yang harus terjadi selanjutnya:

fetch("/api/user")
  .then((response) => response.json())
  .then((user) => console.log(user.name))
  .catch((error) => console.log("Failed:", error.message));

Tiga janji itu menyatakan

Negara Artinya Apa yang berjalan
Tertunda Pekerjaan belum selesai Belum ada apa-apa
Terpenuhi Itu diakhiri dengan sebuah nilai then penangan
Ditolak Itu gagal karena suatu alasan catch penangan

Janji yang dipenuhi atau ditolak disebut diselesaikan. Sebuah janji hanya bisa ditepati satu kali. Setelah itu, status dan nilainya ditetapkan, dan panggilan selanjutnya ke resolve atau reject diabaikan.

Ciptakan sebuah janji

Anda biasanya menggunakan janji dari API seperti fetch, tetapi membuatnya menunjukkan cara kerjanya. Konstruktor menerima dua fungsi, resolve dan reject:

function fetchUser(id) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (id > 0) {
        resolve({ id, name: "Asha" });
      } else {
        reject(new Error("Invalid id"));
      }
    }, 100);
  });
}

console.log(fetchUser(1));

// Promise { <pending> }

Mencatat janji dengan segera menunjukkan bahwa janji tersebut masih tertunda, karena pengatur waktu belum diaktifkan. Nilainya hanya dapat dicapai melalui handler atau await. Selalu tolak dengan objek Error daripada string, karena Error membawa jejak tumpukan yang membantu proses debug.

lalu, tangkap dan terakhir

Ketiga metode ini melampirkan penangan pada sebuah janji:

fetchUser(1).then((user) => console.log(user.name));
// Asha

fetchUser(-1)
  .then((user) => console.log("never runs", user))
  .catch((error) => console.log("caught:", error.message))
  .finally(() => console.log("finally"));

// caught: Invalid id
// finally

then berjalan jika berhasil, catch berjalan jika gagal, dan finally berjalan dengan cara apa pun. Hal ini menjadikan finally tempat yang tepat untuk pembersihan, seperti menyembunyikan spinner pemuatan. Ia tidak menerima argumen, karena tidak peduli dengan hasilnya.

Merangkai janji

Ide utamanya adalah then selalu mengembalikan janji baru. Apapun yang dikembalikan oleh handler Anda akan menjadi nilai janji baru itu:

Promise.resolve(2)
  .then((n) => n * 10)
  .then((n) => n + 1)
  .then((n) => console.log("chain:", n));

// chain: 21

Jika pawang mengembalikan janji lainnya, rantai menunggu hingga janji tersebut diselesaikan sebelum melanjutkan. Inilah yang mengubah callback bersarang menjadi serangkaian langkah datar:

getUser(id)
  .then((user) => getOrders(user.id))
  .then((orders) => getInvoice(orders[0].id))
  .then((invoice) => console.log(invoice.total))
  .catch(handleError);

Bagaimana kesalahan berjalan melalui sebuah rantai

Janji yang ditolak dilewati setiap then hingga mencapai catch. Melempar ke dalam seorang pawang juga dianggap sebagai penolakan. Dan catch yang kembali secara normal membuat rantai kembali ke jalurnya:

Promise.resolve("start")
  .then(() => {
    throw new Error("step 2 failed");
  })
  .then(() => console.log("skipped"))
  .catch((error) => {
    console.log("caught:", error.message);
    return "recovered";
  })
  .then((value) => console.log("continues:", value));

// caught: step 2 failed
// continues: recovered

Anggap saja ini sebagai versi asinkron dari try dan catch. Satu catch di ujung biasanya menutupi keseluruhan rantai. Jika Anda hanya ingin mencatat kesalahan dan masih gagal, buang lagi dari dalam catch.

Kiat: fetch hanya menolak jika terjadi kegagalan jaringan. Respons 404 atau 500 masih terpenuhi, jadi periksalah response.ok sendiri. Lembar contekan kode status HTTP kami menjelaskan arti setiap kode.

Janji.semua, semua, ras, dan apa saja

Metode statis ini mengoordinasikan beberapa janji sekaligus. Semuanya mengambil array dan mengembalikan satu janji.

Metode Memenuhi kapan Menolak kapan Gunakan untuk
Promise.all Semua memenuhi Ada yang menolak Semua hasil diperlukan
Promise.allSettled Semua beres Tidak pernah Anda menginginkan setiap hasil
Promise.race Yang pertama menyelesaikan terpenuhi Yang pertama menyelesaikan penolakan Batas waktu
Promise.any Yang pertama terpenuhi Semua menolak Sumber sukses pertama

Untuk mengujinya, kami menggunakan dua pembantu kecil, satu berhasil setelah penundaan dan satu lagi gagal setelah penundaan:

const wait = (ms, value) =>
  new Promise((resolve) => setTimeout(() => resolve(value), ms));
const fail = (ms, message) =>
  new Promise((_, reject) => setTimeout(() => reject(new Error(message)), ms));

Promise.all

await Promise.all([wait(300, "a"), wait(100, "b"), wait(200, "c")]);

// [ 'a', 'b', 'c' ]   took about 300 ms

Dua detail yang perlu diperhatikan. Hasil tetap mengikuti urutan masukan, meskipun b selesai terlebih dahulu. Dan total waktunya sekitar 300 ms, waktu tugas paling lambat dan bukan jumlah 600 ms, karena ketiganya sudah berjalan sekaligus. Jika salah satu dari mereka menolak, maka semuanya langsung menolak:

await Promise.all([wait(100, "a"), fail(50, "b failed")]);

// rejected: b failed

Promise.allSettled

Ini menunggu semuanya dan melaporkan setiap hasil, sehingga satu kegagalan tidak menghilangkan sisanya. Ini sesuai dengan dasbor tempat setiap widget dimuat secara independen:

const results = await Promise.allSettled([wait(50, "a"), fail(50, "b failed")]);
results.map((r) => r.status);

// [ 'fulfilled', 'rejected' ]

Janji.ras dan Janji.any

await Promise.race([wait(300, "slow"), wait(100, "fast")]);   // fast
await Promise.any([fail(50, "x"), wait(100, "ok")]);          // ok

Perbedaannya adalah race mengambil penyelesaian pertama, meskipun gagal, sedangkan any mengabaikan kegagalan selama sesuatu berhasil. Penggunaan klasik race adalah menambahkan batas waktu ke permintaan yang lambat, meskipun tugas yang lebih lambat tetap berjalan di latar belakang kecuali Anda membatalkannya.

Janji dan async/menunggu

async dan await adalah cara yang lebih mudah dibaca untuk bekerja dengan janji yang sama. Fungsi async selalu mengembalikan janji, dan await menjeda fungsi tersebut hingga janji diselesaikan:

async function showInvoice(id) {
  try {
    const user = await getUser(id);
    const orders = await getOrders(user.id);
    console.log(orders.length);
  } catch (error) {
    console.log("Failed:", error.message);
  }
}

Penolakan menjadi kesalahan yang terjadi, jadi try dan catch biasa berfungsi. Anda masih memerlukan Promise.all untuk pekerjaan paralel, karena menunggu panggilan demi panggilan akan menjalankannya secara berurutan. Panduan async/await JavaScript kami membahas hal ini lebih dalam.

Janji dan putaran acara

Penangan janji tidak pernah dipanggil segera, bahkan ketika janji sudah dilunasi. Mereka berjalan setelah kode saat ini selesai, dan sebelum penghitung waktu apa pun. Ini buktinya:

setTimeout(() => console.log("timeout"), 0);
Promise.resolve().then(() => console.log("microtask"));
console.log("sync");

// sync
// microtask
// timeout

Kode sinkron dijalankan terlebih dahulu. Berikutnya adalah antrean tugas mikro, yang menampung penangan janji. Baru kemudian perulangan peristiwa mengambil tugas berikutnya, seperti pengatur waktu. Ini adalah pertanyaan wawancara yang populer, dan ini menjelaskan mengapa angka nol setTimeout tidak terlalu langsung.

Janji vs panggilan balik

Kekhawatiran Panggilan balik Janji
Urutan Bersarang, lebih dalam di setiap langkah Rantai datar
Kesalahan Diperiksa di setiap level Satu catch dapat menutupi rantai
Pekerjaan paralel Penghitung manual Promise.all
Disebut dua kali karena kesalahan? Mungkin Tidak bisa diselesaikan dua kali

Kesalahan umum

  • Lupa kembali ke dalam then. Tanpa return, langkah selanjutnya menerima undefined dan tidak menunggu janji batin Anda.
  • Tidak catch sama sekali. Hal ini menyebabkan penolakan yang tidak tertangani, dan di Node.js menghentikan proses secara default.
  • Membuat sarang, bukan merangkai. Menempatkan then di dalam then akan menciptakan kembali neraka callback. Kembalikan janjinya dan lanjutkan rantainya.
  • Membungkus janji di new Promise. Jika suatu fungsi sudah mengembalikan janji, gunakan saja.
  • Menggunakan forEach dengan callback asinkron. Tidak menunggu. Gunakan for...of atau Promise.all dengan map, seperti yang ditunjukkan dalam panduan kami tentang metode array JavaScript.
  • Menganggap sebuah janji bisa dibatalkan. Ia tidak bisa dengan sendirinya. Untuk permintaan, gunakan AbortController.

Penutup

Janji mempunyai beberapa aturan: janji diselesaikan satu kali, then mengembalikan janji baru, dan kesalahan terus berlanjut hingga ada yang menangkapnya. Begitu aturan tersebut terasa alami, async dan await tidak lagi bersifat ajaib. Untuk berlatih, tulis ulang satu fungsi berbasis panggilan balik menggunakan janji, lalu ambil dua titik akhir dengan Promise.all dan tangani kegagalan dengan benar.

Pertanyaan yang sering diajukan

Apa yang dimaksud dengan janji dalam JavaScript?

Janji adalah objek yang mewakili hasil akhir dari pekerjaan asinkron. Ini dimulai sebagai tertunda, lalu dipenuhi dengan suatu nilai atau ditolak dengan suatu alasan.

Apa perbedaan antara lalu dan menangkap?

lalu berjalan ketika janji terpenuhi, dan catch berjalan ketika janji ditolak. catch secara efektif hanya dengan penangan penolakan, dan juga dapat menangkap kesalahan yang terjadi pada langkah sebelumnya.

Apa perbedaan antara Promise.all dan Promise.allSettled?

Janji.semua ditolak begitu satu janji ditolak. Promise.allSettled selalu menunggu semuanya dan melaporkan status dan nilai atau alasannya masing-masing.

Haruskah saya menggunakan janji atau async/menunggu?

Mereka bekerja sama, karena menunggu dibangun berdasarkan janji. Sebagian besar kode terbaca paling baik dengan async/await, sementara Promise.all dan metode serupa tetap berguna untuk pekerjaan paralel.

Apakah janji berjalan secara paralel?

JavaScript menjalankan sepotong kode pada suatu waktu di thread, tetapi berfungsi seperti permintaan jaringan yang terjadi di latar belakang. Beberapa di antaranya dapat dilakukan secara bersamaan.

Teruslah belajar

Bekerja dengan Stack Quora

Butuh bantuan dengan pengujian, WordPress atau SEO?

Kami membantu tim mengirimkan perangkat lunak yang lebih baik dan mengembangkan situs mereka. Beritahu kami apa yang sedang Anda kerjakan dan kami akan menyarankan langkah selanjutnya yang jelas.

Teruslah membaca

Panduan lebih lanjut tentang pengujian, AI & pengembangan modern

Menikmati artikel ini? Pilih topik dan langsung masuk ke tutorial terbaru kami.

Kecerdasan buatan

Penjelasan Halusinasi AI: Mengapa Model Bahasa Memperbaiki Masalah dan Cara Menguranginya

Halusinasi AI menjelaskan: apa itu, mengapa model bahasa memproduksinya, tipe umum, cara menguranginya dengan landasan dan petunjuk, dan pemeriksaan…

Baca artikel →
DevOps

Penjelasan Variabel Lingkungan: File .env, Rahasia, dan Konfigurasi Dilakukan dengan Benar

Variabel lingkungan dijelaskan dengan contoh Python yang kami jalankan: membaca dan mengaturnya, mengapa setiap nilai berupa string, file .env, pewa…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Pembatasan Kecepatan API: Algoritma, Header, dan Penanganan 429 Kesalahan

Pembatasan laju API dijelaskan dengan simulasi yang kami jalankan: keranjang token, jendela tetap, jendela geser, respons 429, header batas laju, pe…

Baca artikel →
Otomatisasi pengujian

Mengejek dengan Python: unittest.mock, patch dan Kesalahan yang Membuat Tes Berbohong

Mengejek dengan Python dengan unittest.mock, menguji: Mock dan return_value, side_effect, menambal di mana nama digunakan, spesifikasi dan autospec,…

Baca artikel →
Pengujian perangkat lunak

Penjelasan Cakupan Kode: Cakupan Jalur vs Cabang dan Apa Arti 100% Sebenarnya

Cakupan kode dijelaskan dengan coverage.py yang sebenarnya dijalankan: cakupan garis, cabang dan kondisi, membaca laporan, mengapa cakupan 100% masi…

Baca artikel →
Basis data & SQL

DELETE vs TRUNCATE vs DROP dalam SQL: Perbedaan, Rollback dan Kapan Menggunakan Masing-Masing

DELETE vs TRUNCATE vs DROP dijelaskan dengan SQL yang diuji: apa yang dihapus, rollback, pemicu, reset identitas, kecepatan, dan perbedaan PostgreSQ…

Baca artikel →
Basis data & SQL

Penjelasan Tampilan SQL: Membuat, Menggunakan, dan Menghindari Kesalahan, Dengan Contoh

Tampilan SQL dijelaskan dengan kueri yang kami jalankan: membuat tampilan, hasil langsung, menyembunyikan kolom, kinerja, tampilan yang dapat diperb…

Baca artikel →
Pengembangan perangkat lunak

Antarmuka TypeScript vs Tipe: Perbedaan Nyata, Diuji Dengan Kompiler

Antarmuka TypeScript vs tipe, diperiksa dengan kompiler sebenarnya: apa yang bisa dilakukan keduanya, apa yang hanya bisa dilakukan satu orang, peng…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Python *args dan **kwargs: Fungsi Fleksibel Dengan Contoh Jelas

Python *args dan **kwargs dijelaskan dengan kode yang kami jalankan: pengepakan dan pembongkaran, urutan parameter, argumen hanya kata kunci dan pos…

Baca artikel →
Pengembangan perangkat lunak

Fungsi Python Lambda: Sintaks, Kegunaan Sebenarnya, dan Kapan Tidak Digunakan

Fungsi python lambda dijelaskan dengan kode yang kami jalankan: sintaksis, pengurutan dengan kunci, peta dan filter, penutupan, jebakan pengikatan a…

Baca artikel →
Kecerdasan buatan

Apa Itu Agen AI? Cara Kerjanya, Dengan Agent Loop Sederhana yang Dapat Anda Jalankan

Apa itu agen AI? Panduan sederhana tentang loop agen, alat, memori, dan pagar pembatas, dengan loop Python kecil yang kami jalankan, risiko nyata da…

Baca artikel →
DevOps

Pemantauan vs Observabilitas: Perbedaan Nyata, Dengan Log, Metrik, dan Jejak

Penjelasan pemantauan vs observabilitas: kegagalan yang diketahui dan tidak diketahui, log, metrik dan jejak, penelusuran insiden checkout, sinyal e…

Baca artikel →
DevOps

Volume Docker vs Bind Mounts: Pertahankan Data Kontainer dengan Cara yang Benar

Volume Docker vs pengikatan pengikat dijelaskan: mengapa data kontainer menghilang, volume yang diberi nama, pengikatan pengikatan, tmpfs, contoh Tu…

Baca artikel →
Otomatisasi pengujian

TDD vs BDD: Perbedaan Utama, Satu Fitur Dibangun dengan Dua Cara dan Kapan Menggunakan Masing-masing

TDD vs BDD dijelaskan dengan satu fitur diskon yang dibuat dengan dua cara: refactor merah-hijau dengan kode yang kami jalankan, skenario Mengingat-…

Baca artikel →
Pengujian perangkat lunak

User Acceptance Testing (UAT): Proses, Checklist dan Contoh Nyata

Pengujian penerimaan pengguna menjelaskan: siapa yang menjalankannya, perbedaannya dengan QA, proses tujuh langkah, templat kasus uji UAT, daftar pe…

Baca artikel →
Basis data & SQL

Penjelasan Nilai NULL SQL: IS NULL, COALESCE, NULLIF dan Jebakan yang Harus Dihindari

Nilai SQL NULL dijelaskan dengan kueri yang kami jalankan: logika tiga nilai, IS NULL, COALESCE, NULLIF, cara agregat, penggabungan, dan pengurutan …

Baca artikel →
Basis data & SQL

Pernyataan SQL CASE WHEN: Sintaks, Contoh Nyata dan Kesalahan Umum

SQL CASE KETIKA dijelaskan dengan kueri yang kami jalankan: formulir sederhana dan dicari, urutan kondisi, pivot dengan SUM, trik COUNT, pengurutan …

Baca artikel →
Pengembangan perangkat lunak

Apa itu JWT? Token Web JSON Dijelaskan Dengan Contoh Kerja

Apa itu JWT? JSON Web Tokens menjelaskan: tiga bagian, token yang dibuat dan dirusak dalam kode yang kami jalankan, sesi JWT vs, penyimpanan, token …

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Loop Acara JavaScript: Call Stack, Microtasks, dan Timer Dengan Contoh

Perulangan peristiwa JavaScript dijelaskan dengan kode yang kami jalankan: tumpukan panggilan, antrian tugas dan tugas mikro, mengapa setTimeout 0 t…

Baca artikel →
Pengembangan perangkat lunak

Generator Python dan Penjelasan Hasil: Menghemat Memori Dengan Contoh Nyata

Generator dan hasil Python dijelaskan dengan kode yang kami jalankan: bagaimana mereka menjeda dan melanjutkan, mengukur penghematan memori, saluran…

Baca artikel →
Kecerdasan buatan

Apa itu Embedding? Kesamaan Vektor dan Kosinus Dijelaskan Secara Sederhana

Apa itu embeddings? Panduan bahasa sederhana tentang vektor, kesamaan kosinus, dan penelusuran semantik, dengan contoh kecil yang kami jalankan, pen…

Baca artikel →
DevOps

Penerapan Biru-Hijau vs Canary: Perbedaan, Kompromi, dan Cara Memilih

Penjelasan penerapan blue-green vs canary: cara kerja masing-masing, biaya, risiko dan rollback, pengelompokan pengguna stabil yang kami uji, migras…

Baca artikel →
Otomatisasi pengujian

Tes Tidak Stabil: Apa Penyebabnya dan Cara Memperbaikinya untuk Kebaikan

Pengujian yang tidak stabil dijelaskan dengan demo yang kami jalankan: penyebab utama, cara mengonfirmasi dan mendiagnosisnya, perbaikan waktu yang …

Baca artikel →
Pengujian perangkat lunak

Load Testing vs Stress Testing: Perbedaan, Metrik dan Contoh k6

Penjelasan pengujian beban vs pengujian stres: apa yang dibuktikan masing-masing, pengujian lonjakan dan rendam, metrik yang penting, mengapa rata-r…

Baca artikel →
Pengujian perangkat lunak

Kasus Uji vs Skenario Uji: Perbedaan Utama, Contoh, dan Kapan Menggunakan Masing-masing

Penjelasan kasus uji vs skenario pengujian: definisi yang jelas, tabel berdampingan, satu fitur pengaturan ulang kata sandi yang diambil dari skenar…

Baca artikel →
Basis data & SQL

Optimasi Kueri SQL: Baca Rencana Eksekusi dan Perbaiki Kueri Lambat, Dengan Pengaturan Waktu

Pengoptimalan kueri SQL diuji pada sejuta baris: membaca rencana eksekusi, menambahkan indeks yang tepat, memperbaiki filter yang tidak dapat disarg…

Baca artikel →
Basis data & SQL

SQL UNION vs UNION ALL: Perbedaan, Contoh dan Kinerja Diuji

SQL UNION vs UNION ALL dijelaskan dengan kueri yang kami jalankan: duplikat, aturan yang diikuti keduanya, bug data nyata, kinerja terukur, INTERSEC…

Baca artikel →
Pengembangan perangkat lunak

Tutorial API Pengambilan JavaScript: GET, POST, Penanganan Kesalahan, dan Batas Waktu

Tutorial JavaScript Fetch API diuji pada server lokal: GET dan POST, mengapa 404 tidak muncul, bantuan yang dapat digunakan kembali, string kueri, b…

Baca artikel →
Pengembangan perangkat lunak

Penanganan File Python: Baca, Tulis, CSV, JSON dan pathlib Dengan Contoh

Penanganan file Python dijelaskan dengan kode yang kami jalankan: mode terbuka, dengan, membaca file besar, CSV, JSON, pathlib, file biner, penulisa…

Baca artikel →
Pengembangan perangkat lunak

Kelas dan Objek Python: Tutorial OOP Dengan Contoh Nyata

Kelas dan objek Python dijelaskan dengan kode yang kami jalankan: __init__, metode, atribut kelas vs instance, warisan, properti, metode dunder, kel…

Baca artikel →
Kecerdasan buatan

Apa Itu Model Bahasa Besar? Bagaimana LLM Bekerja, Dijelaskan Tanpa Hype

Apa yang dimaksud dengan model bahasa besar? LLM dijelaskan dalam bahasa sederhana: token, penyematan, perhatian, pelatihan, jendela suhu dan kontek…

Baca artikel →
DevOps

Perintah Linux untuk Pemula: Panduan Terminal Penting Dengan Contoh

Perintah Linux untuk pemula, dikelompokkan berdasarkan tugas: navigasi, file, melihat log, grep, pipa, izin, proses dan arsip, dengan contoh analisi…

Baca artikel →
Otomatisasi pengujian

Selenium vs Penulis Drama: Perbedaan Utama, Perbandingan Kode, dan Mana yang Harus Dipilih

Selenium vs Playwright dibandingkan: arsitektur, menunggu, dukungan browser dan bahasa, debugging, pengujian yang sama di kedua alat, saran migrasi …

Baca artikel →
Pengujian perangkat lunak

Partisi Ekivalensi: Teknik Desain Tes Dijelaskan Dengan Contoh yang Dikerjakan

Penjelasan partisi ekivalensi: cara menemukan partisi yang valid dan tidak valid, contoh yang berfungsi untuk usia, kata sandi dan kupon, pengujian …

Baca artikel →
Pengujian perangkat lunak

Severity vs Priority dalam Pengujian Perangkat Lunak: Perbedaan, Matriks dan Contoh Nyata

Keparahan vs prioritas dalam pengujian perangkat lunak dijelaskan: definisi yang jelas, matriks empat arah dengan contoh, skala level, siapa yang me…

Baca artikel →
Basis data & SQL

Tutorial Subkueri SQL: Jenis, Subkueri yang Berkorelasi, dan ADA Dengan Contoh

Tutorial subkueri SQL dengan kueri yang kami jalankan: subkueri skalar, IN, FROM dan SELECT, subkueri yang berkorelasi, EXISTS, jebakan NOT IN NULL …

Baca artikel →
Basis data & SQL

Penjelasan Transaksi SQL dan ACID: COMMIT, ROLLBACK dan Tingkat Isolasi

Transaksi SQL dan ACID dijelaskan dengan transfer bank yang kami jalankan: COMMIT, ROLLBACK, savepoint, kunci, tingkat isolasi, pembacaan kotor, keb…

Baca artikel →
Pengembangan perangkat lunak

Lembar Cheat Perintah Git: Perintah yang Sebenarnya Anda Gunakan, Beserta Contohnya

Lembar contekan perintah Git yang dikelompokkan berdasarkan tugas: pengaturan, pementasan, cabang, remote, simpanan, riwayat, dan pembatalan kesalah…

Baca artikel →
Pengembangan perangkat lunak

Penjelasan Janji JavaScript: lalu, tangkap, Janji.semua, dan Kesalahan Umum

Janji JavaScript dijelaskan dengan kode yang kami jalankan: status, rantai lalu dan tangkap, penanganan kesalahan, Promise.all, allSettled, race dan…

Baca artikel →
Pengembangan perangkat lunak

Tutorial Kamus Python: Metode, Contoh dan Pola Umum

Tutorial kamus Python dengan kode yang kami jalankan: membuat, membaca dan memperbarui dicts, metode utama, penggabungan, pemahaman, pola penghitung…

Baca artikel →
Kecerdasan buatan

Apa itu RAG? Generasi Retrieval-Augmented Dijelaskan Dengan Contoh Kerja

Apa itu RAG? Generasi yang ditambah pengambilan dijelaskan langkah demi langkah: pengindeksan, pemotongan, penyematan, pengambilan, contoh kecil Pyt…

Baca artikel →
DevOps

Tutorial Terraform untuk Pemula: Infrastruktur sebagai Kode Dari File Pertama hingga Modul

Tutorial Terraform untuk pemula: mulai tanpa akun cloud, pelajari init, rencanakan dan terapkan, lalu variabel, keluaran, status, modul, dan alur ke…

Baca artikel →
DevOps

Docker vs Kubernetes: Perbedaan Utama, Cara Kerja Sama, dan Yang Anda Butuhkan

Docker vs Kubernetes menjelaskan: apa yang dilakukan masing-masing, aplikasi yang sama dijalankan dengan keduanya, Docker Compose dan Swarm dibandin…

Baca artikel →
Otomatisasi pengujian

Tutorial Pytest untuk Pemula: Fixture, Parametrize dan Contoh Nyata

Tutorial pytest untuk pemula dengan pengujian yang kami jalankan di pytest 9.2: pernyataan, perlengkapan, parametrize, conftest, marker, tmp_path, m…

Baca artikel →
Pengujian perangkat lunak

Siklus Hidup Pengujian Perangkat Lunak (STLC): 6 Fase, Kriteria Masuk dan Keluar, Contoh

Siklus hidup pengujian perangkat lunak menjelaskan: enam fase STLC dengan kriteria masuk dan keluar, hasil, contoh fitur login yang berfungsi, STLC …

Baca artikel →
Pengembangan perangkat lunak

Git merge vs rebase: perbedaan, contoh, dan kapan memakai masing-masing

Git merge vs rebase dijelaskan dengan keluaran log nyata, tabel perbandingan, aturan emas rebase, dan alur kerja tim yang aman.

Baca artikel →
Pengembangan perangkat lunak

List Comprehension Python: Sintaks, Contoh, dan Kapan Harus Dihindari

List comprehension Python dijelaskan: sintaks, filter, if-else, perulangan bersarang, waktu yang diukur, dan kapan perulangan for biasa lebih baik.

Baca artikel →
Basis data & SQL

Penjelasan SQL JOIN dengan Contoh (Inner, Left, Right, Full)

Pahami SQL JOIN langkah demi langkah dengan tabel dan query contoh: INNER, LEFT, RIGHT, FULL, CROSS, dan SELF, plus kesalahan umum dan tips performa.

Baca artikel →