]> git.lizzy.rs Git - lua_async.git/blobdiff - promises.lua
Fix typo in interval code
[lua_async.git] / promises.lua
index fb86af7b65908d0067ac5ca0d19fffcc0e061401..29bcdabcf374d8c38637d55144194fc68d9c4c7e 100644 (file)
@@ -1,3 +1,4 @@
+local unpack = unpack or table.unpack
 local PromisePrototype = {}
 
 function PromisePrototype:__run_handler(func, ...)
@@ -44,6 +45,25 @@ function PromisePrototype:__reject_raw(reason)
        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 +84,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(