Async/await korutiineilla
Luokaa async()- ja await()-apufunktiot, jotka keskeyttävät ja jatkavat korutiineja.
Async/await korutiineilla on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Async/await-ajatus
Async/await on ohjelmointimalli, jossa asynkroniset operaatiot näyttävät synkroniselta koodilta. Luassa coroutinet tarjoavat tähän luonnollisen yield/resume-mekanismin.
await-funktio
await(future) yieldaa nykyisen coroutinen ja tallentaa takaisinkutsun, joka resuumailee sen, kun future valmistuu.
local function await(future)
local co = coroutine.running()
future.onComplete = function(result)
coroutine.resume(co, result)
end
return coroutine.yield()
endasync-funktiokuori
async(fn) käärii funktion niin, että se suoritetaan uudessa ajastimen hallinnoimassa coroutinessa.
local function async(fn)
return function(...)
local co = coroutine.create(fn)
local ok, err = coroutine.resume(co, ...)
if not ok then print("async error:", err) end
return co
end
endYksinkertainen future-objekti
Future edustaa vielä valmistumatonta tulosta. Viimeistelkää se myöhemmin, jolloin se resuumailee kaikki odottavat coroutinet.
local function newFuture()
local f = {done=false, value=nil, waiters={}}
f.complete = function(val)
f.done = true; f.value = val
for _, cb in ipairs(f.waiters) do cb(val) end
end
f.andThen = function(cb)
if f.done then cb(f.value)
else f.waiters[#f.waiters+1] = cb end
end
return f
endawait käytännössä
Kirjoittakaa näennäisesti peräkkäistä asynkronista koodia, joka sisäisesti yieldaa ja resuumailee.
local fetchData = async(function(url)
local result = await(httpGet(url)) -- yields
local parsed = await(parseJSON(result)) -- yields again
print("Got:", parsed.name)
end)
fetchData("http://example.com/api")Virheiden välittäminen
Välittäkää virheet futuren kautta: jos operaatio epäonnistuu, resumatkaa coroutine virhelipun ja virheilmoituksen kanssa.
local function awaitSafe(future)
local co = coroutine.running()
future.onComplete = function(ok, result)
coroutine.resume(co, ok, result)
end
return coroutine.yield()
endPeräkkäin vai rinnakkain
Käyttäkää await-kutsua peräkkäin toisistaan riippuvaisiin operaatioihin. Riippumattomissa operaatioissa käynnistäkää molemmat coroutinet ja odottakaa join-futurea.
Promise.all-malli
Suorittakaa useita asynkronisia tehtäviä ja odottakaa niiden kaikkien valmistumista laskurifuturen avulla.
local function all(futures)
local results = {}
local count = #futures
local combined = newFuture()
for i, f in ipairs(futures) do
f:andThen(function(v)
results[i] = v
count = count - 1
if count == 0 then combined.complete(results) end
end)
end
return combined
endPeruuttaminen
Toteuttakaa peruutus merkitsemällä coroutine peruutetuksi ennen sen resumaamista. Coroutinen on tarkistettava lippu ja palattava heti.
I/O-integraatio
Integroikaa mukaan ei-estävä I/O: kun I/O-kutsu estyisi, yieldatkaa ja rekisteröikää takaisinkutsu, joka resuumailee coroutinen, kun dataa on saatavilla.
Vertailu callback-tyyliin
Coroutinejen async/await-koodi on huomattavasti luettavampaa kuin sisäkkäiset takaisinkutsut. Myös virheenkäsittely pcall-kutsulla on selkeämpää kuin takaisinkutsujen virheparametrien käyttö.
Async/await-kysymys
Mitä await(future) tekee coroutine-pohjaisessa async-järjestelmässä?
Kertaus: Async/await coroutineilla
Toteuttakaa async/await coroutineilla käärimällä asynkroniset operaatiot futureiksi, jotka resuumailevat yieldanneen coroutinen valmistuessaan. Tuloksena on peräkkäiseltä näyttävää koodia, joka ei todellisuudessa estä suoritusta.
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 ”Async/await korutiineilla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Async/await korutiineilla”. 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 ”Async/await korutiineilla”?
Luokaa async()- ja await()-apufunktiot, jotka keskeyttävät ja jatkavat korutiineja. 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 2/4.
Kuinka kauan ”Async/await korutiineilla”-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