Software /
code /
prosody
Diff
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 |
line wrap: on
line diff
--- a/util/promise.lua Sun Jun 07 02:25:56 2020 +0200 +++ b/util/promise.lua Mon Jun 08 14:01:02 2020 +0100 @@ -104,6 +104,27 @@ end); end +local function all_settled(promises) + return new(function (resolve) + local count, total, results = 0, #promises, {}; + for i = 1, total do + promises[i]:next(function (v) + results[i] = { status = "fulfilled", value = v }; + count = count + 1; + if count == total then + resolve(results); + end + end, function (e) + results[i] = { status = "rejected", reason = e }; + count = count + 1; + if count == total then + resolve(results); + end + end); + end + end); +end + local function race(promises) return new(function (resolve, reject) for i = 1, #promises do @@ -149,6 +170,7 @@ resolve = resolve; reject = reject; all = all; + all_settled = all_settled; race = race; try = try; is_promise = is_promise;