Software / code / prosody
Comparison
util/promise.lua @ 9512:439cf3bbe5f3
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.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 18 Oct 2018 12:11:50 +0100 |
| parent | 9510:8ef46d09386a |
| child | 9513:4f4f9823bd1d |
comparison
equal
deleted
inserted
replaced
| 9511:cb88d729e98d | 9512:439cf3bbe5f3 |
|---|---|
| 44 | 44 |
| 45 end | 45 end |
| 46 local function _reject(e) | 46 local function _reject(e) |
| 47 if resolved then return; end | 47 if resolved then return; end |
| 48 resolved = true; | 48 resolved = true; |
| 49 if promise_settle(p, "rejected", next_rejected, p._pending_on_rejected, e) then | 49 if is_promise(e) then |
| 50 e:next(new_resolve_functions(p)); | |
| 51 elseif promise_settle(p, "rejected", next_rejected, p._pending_on_rejected, e) then | |
| 50 p.reason = e; | 52 p.reason = e; |
| 51 end | 53 end |
| 52 end | 54 end |
| 53 return _resolve, _reject; | 55 return _resolve, _reject; |
| 54 end | 56 end |