diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ffi.mjs | 8 | ||||
-rw-r--r-- | src/gleam/javascript/promise.gleam | 39 |
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) |