diff options
author | Johannes <johtso@gmail.com> | 2024-06-10 15:54:37 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2024-06-20 15:08:44 +0100 |
commit | ef2905f38f913a664dbc0125863a40474d29470f (patch) | |
tree | 04ec49458cf46fe352d13c8d59589f3604be26c4 /src | |
parent | 07cda8ce14c7b8d64459326ec6bdc09b82713a0c (diff) | |
download | javascript-ef2905f38f913a664dbc0125863a40474d29470f.tar.gz javascript-ef2905f38f913a664dbc0125863a40474d29470f.zip |
Add Promise.race functions
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) |