]> git.lizzy.rs Git - lua_async.git/blobdiff - promises.lua
Merge branch 'master' of https://github.com/EliasFleckenstein03/lua_async
[lua_async.git] / promises.lua
index fb86af7b65908d0067ac5ca0d19fffcc0e061401..e65445831d80dd57c59d5d597c0b959e52dfaf07 100644 (file)
@@ -1,3 +1,4 @@
+local unpack = unpack or table.unpack
 local PromisePrototype = {}
 
 function PromisePrototype:__run_handler(func, ...)
@@ -38,12 +39,32 @@ function PromisePrototype:__reject_raw(reason)
        local any_child = false
 
        for _, child in ipairs(self.__children) do
+               any_child = true
                child:reject(reason)
        end
 
        assert(any_child, "Uncaught (in promise): " .. reason)
 end
 
+function PromisePrototype:then_(on_resolve, on_reject)
+       local promise = Promise()
+       promise.__on_resolve = on_resolve
+       promise.__on_reject = on_reject
+
+       self:__add_child(promise)
+
+       return promise
+end
+
+function PromisePrototype:catch(func)
+       local promise = Promise(function() end)
+       promise.__on_reject = func
+
+       self:__add_child(promise)
+
+       return promise
+end
+
 function PromisePrototype:resolve(...)
        assert(self.state == "pending")
 
@@ -64,32 +85,12 @@ function PromisePrototype:reject(reason)
        end
 end
 
-function PromisePrototype:then_(func)
-       local promise = Promise()
-       promise.__on_resolve = func
-
-       self:__add_child(promise)
-
-       return promise
-end
-
-function PromisePrototype:catch(func)
-       local promise = Promise(function() end)
-       promise.__on_reject = func
-
-       self:__add_child(promise)
-
-       return promise
-end
-
 Promise = setmetatable({}, {
        __call = function(_, resolver)
-               local promise = {
+               local promise = setmetatable({
                        state = "pending",
                        __children = {},
-               }
-
-               setmetatable(promise, {__index = PromisePrototype})
+               }, {__index = PromisePrototype})
 
                if resolver then
                        resolver(