Promise-tyyppiset rakenteet
Toteuttakaa deferred-/promise-oliot korutiinien ja takaisinkutsujen avulla.
Promise-tyyppiset rakenteet on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on promise?
Promise edustaa arvoa, joka on saatavilla myöhemmin. Sen tila voi olla pending, fulfilled (arvon kanssa) tai rejected (virheen kanssa).
Lua-promise-taulukko
Toteuttakaa yksinkertainen promise taulukkona, joka sisältää tilan, arvon ja takaisinkutsulistat.
local function newPromise()
return {
state = "pending",
value = nil,
_resolve = {},
_reject = {},
}
endresolve ja reject
Promisen täyttäminen kutsuu kaikkia resolve-takaisinkutsuja. Sen hylkääminen kutsuu kaikkia reject-takaisinkutsuja.
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
endandThen-ketjutus
:andThen(onFulfill, onReject)-metodi palauttaa uuden promisen, mikä mahdollistaa ketjutuksen.
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
endCoroutineen perustuva promise
Yhdistäkää promiset coroutineihin: coroutine odottaa promisea yieldaamalla, ja promisen resolve-takaisinkutsu resuumailee sen.
Promise.all
Odottakaa, että useat promiset valmistuvat kaikki.
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
Ratkaiskaa promise sen promisen perusteella, joka valmistuu ensimmäisenä (täytettynä tai hylättynä).
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
endVirheiden välittäminen ketjuissa
Jos jokin ketjun vaihe heittää virheen, virhe välittyy seuraavalle rejection-käsittelijälle. Käsittelemättömät hylkäykset on kirjattava ketjun lopussa.
Peruutettavat promiset
Lisätkää :cancel()-metodi, joka siirtää promisen erityiseen peruutettuun tilaan ja estää takaisinkutsujen suorittamisen.
Laiskat promiset
Lazy promise aloittaa työnsä vasta, kun ensimmäinen andThen liitetään siihen — tämä on hyödyllistä valinnaisissa asynkronisissa operaatioissa.
Milloin promiset kannattaa valita coroutinejen sijaan
Promiset perustuvat takaisinkutsuihin ja ovat yhdisteltäviä. Coroutinet saavat asynkronisen koodin näyttämään synkroniselta. Luassa coroutine-pohjaiset promiset tarjoavat molemmat: promisejen yhdisteltävyyden ja synkronisen koodin luettavuuden.
Promise-kysymys
Mitä promisen andThen-metodi palauttaa?
Kertaus: Promise-tyyppiset mallit
Promiset edustavat valmistumista odottavia arvoja, joiden tilat ovat pending, fulfilled ja rejected. Ketjuttakaa operaatiot andThen-metodilla. Yhdistäkää promiset coroutineihin async/await-tyylistä koodia varten. Käyttäkää all- ja race-toimintoja rinnakkaisen koordinoinnin toteuttamiseen.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Promise-tyyppiset rakenteet” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Promise-tyyppiset rakenteet”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Promise-tyyppiset rakenteet”?
Toteuttakaa deferred-/promise-oliot korutiinien ja takaisinkutsujen avulla. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Promise-tyyppiset rakenteet”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Yksinkertaisen tapahtumasilmukan rakentaminen
- Async/await korutiineilla
- Promise-tyyppiset rakenteet
- Estämätön I/O luasocketilla