aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ffi.mjs8
-rw-r--r--src/gleam/javascript/promise.gleam39
2 files changed, 47 insertions, 0 deletions
diff --git a/src/ffi.mjs b/src/ffi.mjs
index 0af2c65..7c14c10 100644
--- a/src/ffi.mjs
+++ b/src/ffi.mjs
@@ -139,6 +139,14 @@ export function all_promises(...promises) {
}
}
+export function race_promises(...promises) {
+ if (promises.length === 1) {
+ return Promise.race(promises[0]);
+ } else {
+ return Promise.race(promises);
+ }
+}
+
export function map_new() {
return new Map();
}
diff --git a/src/gleam/javascript/promise.gleam b/src/gleam/javascript/promise.gleam
index 4a5440a..b1893ee 100644
--- a/src/gleam/javascript/promise.gleam
+++ b/src/gleam/javascript/promise.gleam
@@ -102,3 +102,42 @@ pub fn await_list(xs: List(Promise(a))) -> Promise(List(a)) {
@external(javascript, "../../ffi.mjs", "all_promises")
fn do_await_list(a: List(Promise(a))) -> Promise(Array(a))
+
+@external(javascript, "../../ffi.mjs", "race_promises")
+pub fn race2(a: Promise(a), b: Promise(a)) -> Promise(a)
+
+@external(javascript, "../../ffi.mjs", "race_promises")
+pub fn race3(a: Promise(a), b: Promise(a), c: Promise(a)) -> Promise(a)
+
+@external(javascript, "../../ffi.mjs", "race_promises")
+pub fn race4(
+ a: Promise(a),
+ b: Promise(a),
+ c: Promise(a),
+ d: Promise(a),
+) -> Promise(a)
+
+@external(javascript, "../../ffi.mjs", "race_promises")
+pub fn race5(
+ a: Promise(a),
+ b: Promise(a),
+ c: Promise(a),
+ d: Promise(a),
+ e: Promise(a),
+) -> Promise(a)
+
+@external(javascript, "../../ffi.mjs", "race_promises")
+pub fn race6(
+ a: Promise(a),
+ b: Promise(a),
+ c: Promise(a),
+ d: Promise(a),
+ e: Promise(a),
+ f: Promise(a),
+) -> Promise(a)
+
+@external(javascript, "../../ffi.mjs", "race_promises")
+pub fn race_list(a: List(Promise(a))) -> Promise(a)
+
+@external(javascript, "../../ffi.mjs", "race_promises")
+pub fn race_array(a: Array(Promise(a))) -> Promise(a)