From 7acdc30e1c744d5435821c37375d5ef136db7230 Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Sun, 29 Aug 2021 19:57:06 +0100 Subject: Promise await_array --- CHANGELOG.md | 4 ++-- src/ffi.js | 6 +++++- src/gleam/javascript/promise.gleam | 4 ++++ 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. 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) }) +} -- cgit v1.2.3