Skip to content

Commit 673c53e

Browse files
committed
add a promise.wait functionality
1 parent 41e09e9 commit 673c53e

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

src/gleam/javascript/promise.gleam

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,3 +233,9 @@ pub fn race_list(a: List(Promise(a))) -> Promise(a)
233233

234234
@external(javascript, "../../gleam_javascript_ffi.mjs", "race_promises")
235235
pub fn race_array(a: Array(Promise(a))) -> Promise(a)
236+
237+
/// Create a promise that will resolve after a delay.
238+
/// The delay is specified in milliseconds
239+
///
240+
@external(javascript, "../../gleam_javascript_ffi.mjs", "wait")
241+
pub fn wait(delay: Int) -> Promise(Nil)

src/gleam_javascript_ffi.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ export function rescue(promise, fn) {
107107
return promise.catch((error) => fn(error));
108108
}
109109

110+
export function wait(delay) {
111+
return new Promise((resolve) => {
112+
globalThis.setTimeout(resolve, delay);
113+
})
114+
}
115+
110116
export function all_promises(...promises) {
111117
if (promises.length === 1) {
112118
return Promise.all(promises[0]);

test/gleam/javascript/promise_test.gleam

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,3 +296,9 @@ pub fn race_array_test() {
296296
let assert 1 = x
297297
})
298298
}
299+
300+
pub fn promise_wait_test() {
301+
promise.tap(promise.wait(100), fn(x) {
302+
let Nil = x
303+
})
304+
}

0 commit comments

Comments
 (0)