diff options
-rw-r--r-- | util/promise.lua | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/util/promise.lua b/util/promise.lua index 2583baa2..c988ddc9 100644 --- a/util/promise.lua +++ b/util/promise.lua @@ -55,18 +55,6 @@ local function new_resolve_functions(p) return _resolve, _reject; end -local function new(f) - local p = setmetatable({ _state = "pending", _next = next_pending, _pending_on_fulfilled = {}, _pending_on_rejected = {} }, promise_mt); - if f then - local resolve, reject = new_resolve_functions(p); - local ok, ret = pcall(f, resolve, reject); - if not ok and p._state == "pending" then - reject(ret); - end - end - return p; -end - local function wrap_handler(f, resolve, reject) return function (param) local ok, ret = pcall(f, param); @@ -78,17 +66,16 @@ local function wrap_handler(f, resolve, reject) end; end -function promise_methods:next(on_fulfilled, on_rejected) - return new(function (resolve, reject) - self:_next( - on_fulfilled and wrap_handler(on_fulfilled, resolve, reject) or nil, - on_rejected and wrap_handler(on_rejected, resolve, reject) or nil - ); - end); -end - -function promise_methods:catch(on_rejected) - return self:next(nil, on_rejected); +local function new(f) + local p = setmetatable({ _state = "pending", _next = next_pending, _pending_on_fulfilled = {}, _pending_on_rejected = {} }, promise_mt); + if f then + local resolve, reject = new_resolve_functions(p); + local ok, ret = pcall(f, resolve, reject); + if not ok and p._state == "pending" then + reject(ret); + end + end + return p; end local function all(promises) @@ -126,6 +113,19 @@ local function reject(v) end); end +function promise_methods:next(on_fulfilled, on_rejected) + return new(function (resolve, reject) --luacheck: ignore 431/resolve 431/reject + self:_next( + on_fulfilled and wrap_handler(on_fulfilled, resolve, reject) or nil, + on_rejected and wrap_handler(on_rejected, resolve, reject) or nil + ); + end); +end + +function promise_methods:catch(on_rejected) + return self:next(nil, on_rejected); +end + return { new = new; resolve = resolve; |