aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/ffi.mjs8
-rw-r--r--src/gleam/javascript/promise.gleam3
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)