diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/ffi.mjs | 8 | ||||
-rw-r--r-- | src/gleam/javascript/promise.gleam | 3 |
3 files changed, 13 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index d000fea..0f1843c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +- `promise.new` is added to enable creating promises with a delayed resolve. + ## v0.5.0 - 2023-01-19 - Updated for Gleam v0.30.0. diff --git a/src/ffi.mjs b/src/ffi.mjs index 4aa6995..3889aa8 100644 --- a/src/ffi.mjs +++ b/src/ffi.mjs @@ -81,6 +81,14 @@ class PromiseLayer { } } +export function newPromise(executor) { + return Promise.resolve((resolve) => + executor((value) => { + resolve(PromiseLayer.wrap(value)); + }) + ); +} + export function resolve(value) { return Promise.resolve(PromiseLayer.wrap(value)); } diff --git a/src/gleam/javascript/promise.gleam b/src/gleam/javascript/promise.gleam index 8d531eb..db8a7ef 100644 --- a/src/gleam/javascript/promise.gleam +++ b/src/gleam/javascript/promise.gleam @@ -5,6 +5,9 @@ import gleam/javascript/array.{Array} // TODO: labels pub type Promise(value) +@external(javascript, "../../ffi.mjs", "newPromise") +pub fn new(a: fn(fn(value) -> Nil) -> Nil) -> Promise(value) + @external(javascript, "../../ffi.mjs", "resolve") pub fn resolve(a: value) -> Promise(value) |