aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-08-29 19:57:06 +0100
committerLouis Pilfold <louis@lpil.uk>2021-08-29 19:57:06 +0100
commit7acdc30e1c744d5435821c37375d5ef136db7230 (patch)
tree9f7a112f405535a6e9df9678c65977a75a2d86a8
parent0f2807706218655c5275dbd208ed390c4918a4c5 (diff)
downloadjavascript-7acdc30e1c744d5435821c37375d5ef136db7230.tar.gz
javascript-7acdc30e1c744d5435821c37375d5ef136db7230.zip
Promise await_array
-rw-r--r--CHANGELOG.md4
-rw-r--r--src/ffi.js6
-rw-r--r--src/gleam/javascript/promise.gleam4
-rw-r--r--test/gleam/javascript/promise_test.gleam13
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.
diff --git a/src/ffi.js b/src/ffi.js
index 07649e9..ded63ae 100644
--- a/src/ffi.js
+++ b/src/ffi.js
@@ -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) })
+}