diff options
author | Matthew Wild <mwild1@gmail.com> | 2018-10-18 12:12:52 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2018-10-18 12:12:52 +0100 |
commit | 49a3d43a81738d0106104eefa7b3e667a864ba95 (patch) | |
tree | b92a74e1e69bd938342386f5083e97b316142231 | |
parent | ba60cb91ec9494b595df78892cfb3b1e90fe3865 (diff) | |
download | prosody-49a3d43a81738d0106104eefa7b3e667a864ba95.tar.gz prosody-49a3d43a81738d0106104eefa7b3e667a864ba95.zip |
util.promise: Some code relocation
-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; |