aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-08-29 20:03:06 +0100
committerLouis Pilfold <louis@lpil.uk>2021-08-29 20:03:06 +0100
commit78815bcf52297b6edaa39a3f36e0d543f4f37484 (patch)
tree5f3d5a62d4007b1e003bcd3f1361b50dbb74534f
parent7acdc30e1c744d5435821c37375d5ef136db7230 (diff)
downloadjavascript-78815bcf52297b6edaa39a3f36e0d543f4f37484.tar.gz
javascript-78815bcf52297b6edaa39a3f36e0d543f4f37484.zip
Promise await_list
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/gleam/javascript/promise.gleam9
-rw-r--r--test/gleam/javascript/promise_test.gleam12
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 })
+}