forked from rescript-lang/rescript-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCore__Promise.res
49 lines (33 loc) · 1.37 KB
/
Core__Promise.res
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
type t<+'a> = promise<'a>
@new
external make: ((@uncurry (. 'a) => unit, (. 'e) => unit) => unit) => t<'a> = "Promise"
@val @scope("Promise")
external resolve: 'a => t<'a> = "resolve"
@send external then: (t<'a>, @uncurry ('a => t<'b>)) => t<'b> = "then"
@send
external thenResolve: (t<'a>, @uncurry ('a => 'b)) => t<'b> = "then"
@send external finally: (t<'a>, unit => unit) => t<'a> = "finally"
@scope("Promise") @val
external reject: exn => t<_> = "reject"
@scope("Promise") @val
external all: array<t<'a>> => t<array<'a>> = "all"
@scope("Promise") @val
external all2: ((t<'a>, t<'b>)) => t<('a, 'b)> = "all"
@scope("Promise") @val
external all3: ((t<'a>, t<'b>, t<'c>)) => t<('a, 'b, 'c)> = "all"
@scope("Promise") @val
external all4: ((t<'a>, t<'b>, t<'c>, t<'d>)) => t<('a, 'b, 'c, 'd)> = "all"
@scope("Promise") @val
external all5: ((t<'a>, t<'b>, t<'c>, t<'d>, t<'e>)) => t<('a, 'b, 'c, 'd, 'e)> = "all"
@scope("Promise") @val
external all6: ((t<'a>, t<'b>, t<'c>, t<'d>, t<'e>, t<'f>)) => t<('a, 'b, 'c, 'd, 'e, 'f)> = "all"
@send
external _catch: (t<'a>, @uncurry (exn => t<'a>)) => t<'a> = "catch"
let catch = (promise: promise<'a>, callback: exn => promise<'a>): promise<'a> => {
_catch(promise, err => {
callback(Js.Exn.anyToExnInternal(err))
})
}
@scope("Promise") @val
external race: array<t<'a>> => t<'a> = "race"
external done: promise<'a> => unit = "%ignore"