Comparison

util/promise.lua @ 10922:7d3dbb9eb3eb

util.promise: Add all_settled, which follows semantics of allSettled from ES2020
author Matthew Wild <mwild1@gmail.com>
date Mon, 08 Jun 2020 14:01:02 +0100
parent 9745:0dbb285f903e
child 11211:1151140fc757
comparison
equal deleted inserted replaced
10921:6eb5d2bb11af 10922:7d3dbb9eb3eb
102 end, reject); 102 end, reject);
103 end 103 end
104 end); 104 end);
105 end 105 end
106 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
107 local function race(promises) 128 local function race(promises)
108 return new(function (resolve, reject) 129 return new(function (resolve, reject)
109 for i = 1, #promises do 130 for i = 1, #promises do
110 promises[i]:next(resolve, reject); 131 promises[i]:next(resolve, reject);
111 end 132 end
147 return { 168 return {
148 new = new; 169 new = new;
149 resolve = resolve; 170 resolve = resolve;
150 reject = reject; 171 reject = reject;
151 all = all; 172 all = all;
173 all_settled = all_settled;
152 race = race; 174 race = race;
153 try = try; 175 try = try;
154 is_promise = is_promise; 176 is_promise = is_promise;
155 } 177 }