0Pricing
Lua Academy · Pelajaran

Pola Mirip Promise

Implementasikan objek tertunda/mirip promise menggunakan coroutine dan callback.

Pola Mirip Promise adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Apa Itu Janji?

Janji merepresentasikan nilai yang akan tersedia di masa mendatang. Janji dapat berstatus menunggu, terpenuhi (dengan suatu nilai), atau ditolak (dengan suatu kesalahan).

Tabel Janji Lua

Implementasikan janji minimal sebagai tabel dengan status, nilai, dan daftar panggilan balik.

local function newPromise()
  return {
    state    = "pending",
    value    = nil,
    _resolve = {},
    _reject  = {},
  }
end

Memenuhi dan Menolak

Memenuhi janji akan memanggil semua panggilan balik pemenuhan. Menolaknya akan memanggil semua panggilan balik penolakan.

local function resolve(p, value)
  if p.state ~= "pending" then return end
  p.state = "fulfilled"; p.value = value
  for _, cb in ipairs(p._resolve) do cb(value) end
end
local function reject(p, reason)
  if p.state ~= "pending" then return end
  p.state = "rejected"; p.value = reason
  for _, cb in ipairs(p._reject) do cb(reason) end
end

Perangkaian andThen

Metode :andThen(onFulfill, onReject) mengembalikan janji baru sehingga memungkinkan perangkaian.

function promise:andThen(onFulfill, onReject)
  local next = newPromise()
  self._resolve[#self._resolve+1] = function(v)
    local ok, result = pcall(onFulfill, v)
    if ok then resolve(next, result)
    else reject(next, result) end
  end
  if onReject then
    self._reject[#self._reject+1] = function(e)
      local ok, result = pcall(onReject, e)
      if ok then resolve(next, result)
      else reject(next, result) end
    end
  end
  return next
end

Janji yang Didukung Korutin

Gabungkan janji dengan korutin: korutin menunggu janji dengan menyerahkan kendali, dan panggilan balik penyelesaian janji melakukan resume terhadapnya.

Promise.all

Tunggu hingga beberapa janji semuanya selesai.

local function all(promises)
  local results = {}
  local count = #promises
  local combined = newPromise()
  for i, p in ipairs(promises) do
    p:andThen(function(v)
      results[i] = v; count = count - 1
      if count == 0 then resolve(combined, results) end
    end, function(e) reject(combined, e) end)
  end
  return combined
end

Promise.race

Selesaikan dengan janji pertama yang selesai (terpenuhi atau ditolak).

local function race(promises)
  local combined = newPromise()
  for _, p in ipairs(promises) do
    p:andThen(
      function(v) resolve(combined, v) end,
      function(e) reject(combined, e) end
    )
  end
  return combined
end

Penerusan Kesalahan dalam Rangkaian

Jika langkah apa pun dalam rangkaian menimbulkan kesalahan, kesalahan tersebut diteruskan ke penanganan penolakan berikutnya. Penolakan yang tidak ditangani harus dicatat di akhir rangkaian.

Janji yang Dapat Dibatalkan

Tambahkan metode :cancel() yang mengubah status menjadi status khusus dibatalkan sehingga panggilan balik tidak dijalankan.

Janji Malas

Janji malas baru memulai pekerjaannya ketika andThen pertama dilampirkan — berguna untuk operasi asinkron opsional.

Kapan Menggunakan Janji dibandingkan Korutin

Janji berbasis panggilan balik dan dapat dikomposisikan. Korutin membuat kode asinkron tampak sinkron. Di Lua, janji berbasis korutin memberikan keduanya: kemampuan komposisi janji dan keterbacaan kode sinkron.

Pertanyaan tentang Janji

Apa yang dikembalikan oleh metode andThen pada janji?

Ringkasan: Pola Mirip Janji

Janji merepresentasikan nilai yang masih menunggu dengan status menunggu/terpenuhi/ditolak. Rangkai operasi dengan andThen. Gabungkan dengan korutin untuk kode bergaya asinkron/await. Gunakan all dan race untuk koordinasi paralel.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Mirip Promise” gratis?

Ya — teks lengkap “Pola Mirip Promise” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola Mirip Promise”?

Implementasikan objek tertunda/mirip promise menggunakan coroutine dan callback. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Pola Mirip Promise” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Membangun Perulangan Peristiwa Sederhana
  2. Async/Await dengan Coroutine
  3. Pola Mirip Promise
  4. I/O Non-Pemblokiran dengan luasocket
← Kembali ke Lua Academy