-
-
Save fhammerschmidt/a62d268d4d3800027d376333c9ef3eee to your computer and use it in GitHub Desktop.
Some bindings/helpers for dealing with Promises in ReasonML/BuckleScript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type t(+'a, +'err); | |
type noError; | |
external fromJsPromise: Js.Promise.t('a) => t('a, Js.Promise.error) = "%identity"; | |
external toJsPromise: t('a, 'err) => Js.Promise.t('a) = "%identity"; | |
external relax: t('a, noError) => t('a, 'err) = "%identity"; | |
[@bs.new] external make: ((~resolve: (. 'a) => unit, ~reject: (. 'err) => unit) => unit) => t('a, 'err) = "Promise"; | |
[@bs.val] [@bs.scope "Promise"] external return: 'a => t('a, 'err) = "resolve"; | |
[@bs.val] [@bs.scope "Promise"] external fail: 'err => t('a, 'err) = "reject"; | |
[@bs.send] external bind: (t('a, 'err), [@bs.uncurry] ('a => t('b, 'err))) => t('b, 'err) = "then"; | |
let map = (p, f) => p->bind(res => return(f(res))); | |
[@bs.send] | |
external bind2: | |
(t('a, 'err), [@bs.uncurry] ('a => t('b, 'err2)), [@bs.uncurry] ('err => t('b, 'err2))) => t('b, 'err2) = | |
"then"; | |
let map2 = (p, f, g) => p->bind2(res => return(f(res)), err => return(g(err))); | |
[@bs.send] external catch: (t('a, 'err), [@bs.uncurry] ('err => t('a, noError))) => t('a, noError) = "catch"; | |
[@bs.val] [@bs.scope "Promise"] external all: array(t('a, 'err)) => t(array('a), 'err) = "all"; | |
[@bs.val] [@bs.scope "Promise"] external all2: ((t('a0, 'err), t('a1, 'err))) => t(('a0, 'a1), 'err) = "all"; | |
[@bs.val] [@bs.scope "Promise"] | |
external all3: ((t('a0, 'err), t('a1, 'err), t('a2, 'err))) => t(('a0, 'a1, 'a2), 'err) = "all"; | |
[@bs.val] [@bs.scope "Promise"] | |
external all4: ((t('a0, 'err), t('a1, 'err), t('a2, 'err), t('a3, 'err))) => t(('a0, 'a1, 'a2, 'a3), 'err) = | |
"all"; | |
[@bs.val] [@bs.scope "Promise"] | |
external all5: | |
((t('a0, 'err), t('a1, 'err), t('a2, 'err), t('a3, 'err), t('a4, 'err))) => | |
t(('a0, 'a1, 'a2, 'a3, 'a4), 'err) = | |
"all"; | |
[@bs.val] [@bs.scope "Promise"] | |
external all6: | |
((t('a0, 'err), t('a1, 'err), t('a2, 'err), t('a3, 'err), t('a4, 'err), t('a5, 'err))) => | |
t(('a0, 'a1, 'a2, 'a3, 'a4, 'a5), 'err) = | |
"all"; | |
[@bs.val] [@bs.scope "Promise"] external race: array(t('a, 'err)) => t('a, 'err) = "race"; | |
[@bs.send] external wait: (t('a, noError), [@bs.uncurry] ('a => unit)) => unit = "then"; | |
[@bs.send] external wait2: (t('a, 'err), [@bs.uncurry] ('a => unit), [@bs.uncurry] ('err => unit)) => unit = "then"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment