]> git.lizzy.rs Git - lua_async.git/blob - async_await.lua
Document promises
[lua_async.git] / async_await.lua
1 function async(func)
2         return function(...)
3                 local promise = Promise()
4                 promise.__on_resolve = func
5
6                 local args = {...}
7
8                 lua_async.resume(coroutine.create(function()
9                         promise:resolve(unpack(args))
10                 end))
11
12                 return promise
13         end
14 end
15
16 function await(promise)
17         local co = assert(coroutine.running(), "await called outside of an async function")
18
19         if promise.state == "pending" then
20                 promise:then_(function()
21                         lua_async.resume(co)
22                 end)
23
24                 coroutine.yield()
25         end
26
27         return unpack(promise.values)
28 end