diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-08-29 19:50:10 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-08-29 19:50:44 +0100 |
commit | 0f2807706218655c5275dbd208ed390c4918a4c5 (patch) | |
tree | 78de8c798474d3d6af3472f51ae0d2c17a4e1b96 | |
parent | e57c18156cf11aaeae89e66828811c9fcc42fa81 (diff) | |
download | javascript-0f2807706218655c5275dbd208ed390c4918a4c5.tar.gz javascript-0f2807706218655c5275dbd208ed390c4918a4c5.zip |
Promise await{1,6}
-rw-r--r-- | CHANGELOG.md | 5 | ||||
-rw-r--r-- | src/ffi.js | 4 | ||||
-rw-r--r-- | src/gleam/javascript/promise.gleam | 37 | ||||
-rw-r--r-- | test/gleam/javascript/promise_test.gleam | 43 |
4 files changed, 87 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index be86f89..21931e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,10 @@ - The `javascript` module was created with the `TypeOf`, and `Symbol` types, and `find_symbol`, `make_reference`, `set_reference`, `update_reference`, - `dereference` and `type_of` functions. + `dereference`, and `type_of` functions. - The `javascript/array` module was created with the `Array(element)` type and `to_list`, `from_list`, `map`, `fold`, `fold_right`, `get`, and `length` functions. - The `javascript/promise` module was created with the `Promise(value)` type and - `rescue`, `resolve`, `tap`, `map_try`, `map`, `then_try` and `then` functions. + `rescue`, `resolve`, `tap`, `map_try`, `map`, `then_try`, `await{2,6}` and + `then` functions. @@ -118,3 +118,7 @@ export function set_reference(ref, value) { ref.value = value; return previous; } + +export function all_promises(...promises) { + return Promise.all(promises); +} diff --git a/src/gleam/javascript/promise.gleam b/src/gleam/javascript/promise.gleam index 3c7190c..5e374dd 100644 --- a/src/gleam/javascript/promise.gleam +++ b/src/gleam/javascript/promise.gleam @@ -49,3 +49,40 @@ pub fn then_try( } }) } + +pub external fn await2(Promise(a), Promise(b)) -> Promise(#(a, b)) = + "../../ffi.js" "all_promises" + +pub external fn await3( + Promise(a), + Promise(b), + Promise(c), +) -> Promise(#(a, b, c)) = + "../../ffi.js" "all_promises" + +pub external fn await4( + Promise(a), + Promise(b), + Promise(c), + Promise(d), +) -> Promise(#(a, b, c, d)) = + "../../ffi.js" "all_promises" + +pub external fn await5( + Promise(a), + Promise(b), + Promise(c), + Promise(d), + Promise(e), +) -> Promise(#(a, b, c, d, e)) = + "../../ffi.js" "all_promises" + +pub external fn await6( + Promise(a), + Promise(b), + Promise(c), + Promise(d), + Promise(e), + Promise(f), +) -> Promise(#(a, b, c, d, e, f)) = + "../../ffi.js" "all_promises" diff --git a/test/gleam/javascript/promise_test.gleam b/test/gleam/javascript/promise_test.gleam index c77cd5a..942abcc 100644 --- a/test/gleam/javascript/promise_test.gleam +++ b/test/gleam/javascript/promise_test.gleam @@ -84,3 +84,46 @@ pub fn rescue_poisoned_test() { |> promise.rescue(fn(_) { 100 }) |> promise.tap(fn(a) { assert 100 = a }) } + +pub fn await2_test() { + promise.await2(promise.resolve(1), promise.resolve(3)) + |> promise.tap(fn(x) { assert #(1, 3) = x }) +} + +pub fn await3_test() { + promise.await3(promise.resolve(1), promise.resolve(3), promise.resolve(4)) + |> promise.tap(fn(x) { assert #(1, 3, 4) = x }) +} + +pub fn await4_test() { + promise.await4( + promise.resolve(1), + promise.resolve(3), + promise.resolve(4), + promise.resolve(6), + ) + |> promise.tap(fn(x) { assert #(1, 3, 4, 6) = x }) +} + +pub fn await5_test() { + promise.await5( + promise.resolve(1), + promise.resolve(3), + promise.resolve(4), + promise.resolve(6), + promise.resolve(10), + ) + |> promise.tap(fn(x) { assert #(1, 3, 4, 6, 10) = x }) +} + +pub fn await6_test() { + promise.await6( + promise.resolve(1), + promise.resolve(3), + promise.resolve(4), + promise.resolve(6), + promise.resolve(10), + promise.resolve(13), + ) + |> promise.tap(fn(x) { assert #(1, 3, 4, 6, 10, 13) = x }) +} |