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;