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 }