From a2770298f040307f8dd59c7a88d7e40d37faec14 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Fri, 6 Aug 2021 19:19:23 +0200 Subject: Add source code --- async_await.lua | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 async_await.lua (limited to 'async_await.lua') diff --git a/async_await.lua b/async_await.lua new file mode 100644 index 0000000..97d4f7d --- /dev/null +++ b/async_await.lua @@ -0,0 +1,43 @@ +lua_async.async_await = {} + +function lua_async.resume(co) + local status, err = coroutine.resume(co) + + if coroutine.status(co) == "dead" or err then + lua_async.limiting.unset_limit(co) + end + + if not status then + error("Error (in async function): " .. err) + end +end + +function await(promise) + local co = assert(coroutine.running(), "await called outside of an async function") + + if promise.state == "pending" then + promise:then_(function() + lua_async.resume(co) + end) + + coroutine.yield() + end + + return unpack(promise.values) +end + +function async(func) + return function(...) + local promise = Promise() + promise.__on_resolve = func + + local args = {...} + + lua_async.resume(coroutine.create(function() + promise:resolve(unpack(args)) + end)) + + return promise + end +end + -- cgit v1.2.3