You are currently looking at the < v8.2.0 docs (Reason v3.6 syntax edition). You can find the latest manual page here.
(These docs cover all versions between v3 to v8 and are equivalent to the old BuckleScript docs before the rebrand)
Promise
ReScript has built-in support for JavaScript promises. The 3 functions you generally need are:
Js.Promise.resolve: 'a => Js.Promise.t('a)
Js.Promise.then_: ('a => Js.Promise.t('b), Js.Promise.t('a)) => Js.Promise.t('b)
Js.Promise.catch: (Js.Promise.error => Js.Promise.t('a), Js.Promise.t('a)) => Js.Promise.t('a)
Additionally, here's the type signature for creating a promise on the ReScript side:
Js.Promise.make: (
(
~resolve: (. 'a) => unit,
~reject: (. exn) => unit
) => unit
) => Js.Promise.t('a);
This type signature means that make
takes a callback that takes 2 named arguments, resolve
and reject
. Both arguments are themselves uncurried callbacks (with a dot). make
returns the created promise.
Usage
Using the pipe operator:
let myPromise = Js.Promise.make((~resolve, ~reject) => resolve(. 2));
myPromise
|> Js.Promise.then_(value => {
Js.log(value);
Js.Promise.resolve(value + 2);
})
|> Js.Promise.then_(value => {
Js.log(value);
Js.Promise.resolve(value + 3);
})
|> Js.Promise.catch(err => {
Js.log2("Failure!!", err);
Js.Promise.resolve(-2);
});
Note: we might offer a dedicated syntax for JS promises (async/await) in the future. Stay tuned!