diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b1efc73834..243695fa6c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -350,6 +350,7 @@ Some tips: - Always use `@deprecated` when applicable. - Always use `@raise` when applicable. - Always provide a `@see` tag pointing to MDN for more information when available. +- Format code samples in doc comments via `./cli/rescript-tools.js format-codeblocks ` See [Ocamldoc documentation](http://caml.inria.fr/pub/docs/manual-ocaml/ocamldoc.html#sec333) for more details. @@ -389,6 +390,7 @@ Adding a new entry there requires re-running the analysis tests. Follow these st (If a `make` command fails, consider using the [DevContainer](#b-devcontainer).) Finally, add a line to [CHANGELOG.md](CHANGELOG.md), using the `#### :nail_care: Polish` section. + ## Code structure The highlevel architecture is illustrated as below: diff --git a/packages/@rescript/runtime/Stdlib_Promise.res b/packages/@rescript/runtime/Stdlib_Promise.res index 05f41fa834..1fc411efe3 100644 --- a/packages/@rescript/runtime/Stdlib_Promise.res +++ b/packages/@rescript/runtime/Stdlib_Promise.res @@ -112,3 +112,8 @@ external any: array> => t<'a> = "any" external done: promise<'a> => unit = "%ignore" external ignore: promise<'a> => unit = "%ignore" + +let sleep = ms => + make((resolve, _) => { + let _ = Stdlib_Global.setTimeout(resolve, ms) + }) diff --git a/packages/@rescript/runtime/Stdlib_Promise.resi b/packages/@rescript/runtime/Stdlib_Promise.resi index 626ae5f70c..773bc2d0d9 100644 --- a/packages/@rescript/runtime/Stdlib_Promise.resi +++ b/packages/@rescript/runtime/Stdlib_Promise.resi @@ -441,3 +441,18 @@ external done: promise<'a> => unit = "%ignore" without having to store or process it further. */ external ignore: promise<'a> => unit = "%ignore" + +/** +`sleep(ms)` creates a promise that resolves after `ms` milliseconds. + +## Examples + +```rescript +Promise.sleep(1000) +->Promise.thenResolve(() => { + Console.log("1 second has passed") +}) +->Promise.ignore +``` +*/ +let sleep: int => promise diff --git a/packages/@rescript/runtime/lib/es6/Stdlib_Promise.js b/packages/@rescript/runtime/lib/es6/Stdlib_Promise.js index 475b96b4d9..a01d65f131 100644 --- a/packages/@rescript/runtime/lib/es6/Stdlib_Promise.js +++ b/packages/@rescript/runtime/lib/es6/Stdlib_Promise.js @@ -6,7 +6,14 @@ function $$catch(promise, callback) { return promise.catch(err => callback(Primitive_exceptions.internalToException(err))); } +function sleep(ms) { + return new Promise((resolve, param) => { + setTimeout(resolve, ms); + }); +} + export { $$catch, + sleep, } /* No side effect */ diff --git a/packages/@rescript/runtime/lib/js/Stdlib_Promise.js b/packages/@rescript/runtime/lib/js/Stdlib_Promise.js index eb6fd42776..d0ab9ce4f3 100644 --- a/packages/@rescript/runtime/lib/js/Stdlib_Promise.js +++ b/packages/@rescript/runtime/lib/js/Stdlib_Promise.js @@ -6,5 +6,12 @@ function $$catch(promise, callback) { return promise.catch(err => callback(Primitive_exceptions.internalToException(err))); } +function sleep(ms) { + return new Promise((resolve, param) => { + setTimeout(resolve, ms); + }); +} + exports.$$catch = $$catch; +exports.sleep = sleep; /* No side effect */