From 767997a53a686ace0b60ac6568c6d5483a276f12 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Thu, 18 Oct 2018 12:11:50 +0100 Subject: util.promise: Also support automatic resolution by returning a promise from an on_reject handler Originally unimplemented because it wasn't clear to me what the correct behaviour was, but the A+ spec is clear that both onFulfilled and onRejected may return a promise. --- util/promise.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'util') diff --git a/util/promise.lua b/util/promise.lua index 1f48eb9f..2583baa2 100644 --- a/util/promise.lua +++ b/util/promise.lua @@ -46,7 +46,9 @@ local function new_resolve_functions(p) local function _reject(e) if resolved then return; end resolved = true; - if promise_settle(p, "rejected", next_rejected, p._pending_on_rejected, e) then + if is_promise(e) then + e:next(new_resolve_functions(p)); + elseif promise_settle(p, "rejected", next_rejected, p._pending_on_rejected, e) then p.reason = e; end end -- cgit v1.2.3