From ef2905f38f913a664dbc0125863a40474d29470f Mon Sep 17 00:00:00 2001 From: Johannes Date: Mon, 10 Jun 2024 15:54:37 +0100 Subject: Add Promise.race functions --- src/ffi.mjs | 8 ++++++++ src/gleam/javascript/promise.gleam | 39 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) (limited to 'src') 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) -- cgit v1.2.3