Software /
code /
prosody
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 } |