Mercurial > prosody-hg
comparison util/promise.lua @ 11200:bf8f2da84007
Merge 0.11->trunk
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Thu, 05 Nov 2020 22:31:25 +0100 |
| parents | 7d3dbb9eb3eb |
| children | 1151140fc757 |
comparison
equal
deleted
inserted
replaced
| 11199:6c7c50a4de32 | 11200:bf8f2da84007 |
|---|---|
| 47 promise._state = new_state; | 47 promise._state = new_state; |
| 48 promise._next = new_next; | 48 promise._next = new_next; |
| 49 for _, cb in ipairs(cbs) do | 49 for _, cb in ipairs(cbs) do |
| 50 cb(value); | 50 cb(value); |
| 51 end | 51 end |
| 52 -- No need to keep references to callbacks | |
| 53 promise._pending_on_fulfilled = nil; | |
| 54 promise._pending_on_rejected = nil; | |
| 52 return true; | 55 return true; |
| 53 end | 56 end |
| 54 | 57 |
| 55 local function new_resolve_functions(p) | 58 local function new_resolve_functions(p) |
| 56 local resolved = false; | 59 local resolved = false; |
| 99 end, reject); | 102 end, reject); |
| 100 end | 103 end |
| 101 end); | 104 end); |
| 102 end | 105 end |
| 103 | 106 |
| 107 local function all_settled(promises) | |
| 108 return new(function (resolve) | |
| 109 local count, total, results = 0, #promises, {}; | |
| 110 for i = 1, total do | |
| 111 promises[i]:next(function (v) | |
| 112 results[i] = { status = "fulfilled", value = v }; | |
| 113 count = count + 1; | |
| 114 if count == total then | |
| 115 resolve(results); | |
| 116 end | |
| 117 end, function (e) | |
| 118 results[i] = { status = "rejected", reason = e }; | |
| 119 count = count + 1; | |
| 120 if count == total then | |
| 121 resolve(results); | |
| 122 end | |
| 123 end); | |
| 124 end | |
| 125 end); | |
| 126 end | |
| 127 | |
| 104 local function race(promises) | 128 local function race(promises) |
| 105 return new(function (resolve, reject) | 129 return new(function (resolve, reject) |
| 106 for i = 1, #promises do | 130 for i = 1, #promises do |
| 107 promises[i]:next(resolve, reject); | 131 promises[i]:next(resolve, reject); |
| 108 end | 132 end |
| 144 return { | 168 return { |
| 145 new = new; | 169 new = new; |
| 146 resolve = resolve; | 170 resolve = resolve; |
| 147 reject = reject; | 171 reject = reject; |
| 148 all = all; | 172 all = all; |
| 173 all_settled = all_settled; | |
| 149 race = race; | 174 race = race; |
| 150 try = try; | 175 try = try; |
| 151 is_promise = is_promise; | 176 is_promise = is_promise; |
| 152 } | 177 } |
