diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-08-29 19:57:06 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-08-29 19:57:06 +0100 |
commit | 7acdc30e1c744d5435821c37375d5ef136db7230 (patch) | |
tree | 9f7a112f405535a6e9df9678c65977a75a2d86a8 | |
parent | 0f2807706218655c5275dbd208ed390c4918a4c5 (diff) | |
download | javascript-7acdc30e1c744d5435821c37375d5ef136db7230.tar.gz javascript-7acdc30e1c744d5435821c37375d5ef136db7230.zip |
Promise await_array
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | src/ffi.js | 6 | ||||
-rw-r--r-- | src/gleam/javascript/promise.gleam | 4 | ||||
-rw-r--r-- | test/gleam/javascript/promise_test.gleam | 13 |
4 files changed, 24 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 21931e8..44e1cc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,5 +9,5 @@ `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`, `await{2,6}` and - `then` functions. + `rescue`, `resolve`, `tap`, `map_try`, `map`, `then_try`, `await{2,6}`, + `await_array`, and `then` functions. @@ -120,5 +120,9 @@ export function set_reference(ref, value) { } export function all_promises(...promises) { - return Promise.all(promises); + if (promises.length === 1) { + return Promise.all(promises[0]); + } else { + return Promise.all(promises); + } } diff --git a/src/gleam/javascript/promise.gleam b/src/gleam/javascript/promise.gleam index 5e374dd..b0841e0 100644 --- a/src/gleam/javascript/promise.gleam +++ b/src/gleam/javascript/promise.gleam @@ -1,4 +1,5 @@ import gleam/dynamic.{Dynamic} +import gleam/javascript/array.{Array} // TODO: docs // TODO: labels @@ -86,3 +87,6 @@ pub external fn await6( Promise(f), ) -> Promise(#(a, b, c, d, e, f)) = "../../ffi.js" "all_promises" + +pub external fn await_array(Array(Promise(a))) -> Promise(Array(a)) = + "../../ffi.js" "all_promises" diff --git a/test/gleam/javascript/promise_test.gleam b/test/gleam/javascript/promise_test.gleam index 942abcc..4fadbfe 100644 --- a/test/gleam/javascript/promise_test.gleam +++ b/test/gleam/javascript/promise_test.gleam @@ -1,4 +1,5 @@ import gleam/javascript/promise.{Promise} +import gleam/javascript/array import gleam/javascript.{ObjectType} pub fn map_does_not_collapse_nested_promise_test() -> Promise(Promise(Int)) { @@ -127,3 +128,15 @@ pub fn await6_test() { ) |> promise.tap(fn(x) { assert #(1, 3, 4, 6, 10, 13) = x }) } + +pub fn await_array_test() { + promise.await_array(array.from_list([ + 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] = array.to_list(x) }) +} |