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 = {},
}
endMemenuhi 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
endPerangkaian 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
endJanji 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
endPromise.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
endPenerusan 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
- Membangun Perulangan Peristiwa Sederhana
- Async/Await dengan Coroutine
- Pola Mirip Promise
- I/O Non-Pemblokiran dengan luasocket