diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/gleam/javascript/promise.gleam | 9 | ||||
-rw-r--r-- | test/gleam/javascript/promise_test.gleam | 12 |
3 files changed, 22 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 44e1cc9..ea87997 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,4 +10,4 @@ functions. - The `javascript/promise` module was created with the `Promise(value)` type and `rescue`, `resolve`, `tap`, `map_try`, `map`, `then_try`, `await{2,6}`, - `await_array`, and `then` functions. + `await_list`, `await_array`, and `then` functions. diff --git a/src/gleam/javascript/promise.gleam b/src/gleam/javascript/promise.gleam index b0841e0..bdd3211 100644 --- a/src/gleam/javascript/promise.gleam +++ b/src/gleam/javascript/promise.gleam @@ -90,3 +90,12 @@ pub external fn await6( pub external fn await_array(Array(Promise(a))) -> Promise(Array(a)) = "../../ffi.js" "all_promises" + +pub fn await_list(xs: List(Promise(a))) -> Promise(List(a)) { + xs + |> do_await_list + |> map(array.to_list) +} + +pub external fn do_await_list(List(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 4fadbfe..dc70977 100644 --- a/test/gleam/javascript/promise_test.gleam +++ b/test/gleam/javascript/promise_test.gleam @@ -140,3 +140,15 @@ pub fn await_array_test() { ])) |> promise.tap(fn(x) { assert [1, 3, 4, 6, 10, 13] = array.to_list(x) }) } + +pub fn await_list_test() { + promise.await_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] = x }) +} |