+local unpack = unpack or table.unpack
local PromisePrototype = {}
function PromisePrototype:__run_handler(func, ...)
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")
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(