Source file Js_promise.ml
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
50
51
52
type +'a t = 'a Lwt.t
type error = exn
let make (fn : resolve:('a -> unit) -> reject:(exn -> unit) -> unit) : 'a t =
let promise, resolver = Lwt.task () in
let resolve value = Lwt.wakeup_later resolver value in
let reject exn = Lwt.wakeup_later_exn resolver exn in
fn ~resolve ~reject;
promise
let resolve = Lwt.return
let reject = Lwt.fail
let all (promises : 'a t array) : 'a array t = Lwt.map Stdlib.Array.of_list (Lwt.all (Stdlib.Array.to_list promises))
let all2 (a, b) =
let%lwt res_a = a in
let%lwt res_b = b in
Lwt.return (res_a, res_b)
let all3 (a, b, c) =
let%lwt res_a = a in
let%lwt res_b = b in
let%lwt res_c = c in
Lwt.return (res_a, res_b, res_c)
let all4 (a, b, c, d) =
let%lwt res_a = a in
let%lwt res_b = b in
let%lwt res_c = c in
let%lwt res_d = d in
Lwt.return (res_a, res_b, res_c, res_d)
let all5 (a, b, c, d, e) =
let%lwt res_a = a in
let%lwt res_b = b in
let%lwt res_c = c in
let%lwt res_d = d in
let%lwt res_e = e in
Lwt.return (res_a, res_b, res_c, res_d, res_e)
let all6 (a, b, c, d, e, f) =
let%lwt res_a = a in
let%lwt res_b = b in
let%lwt res_c = c in
let%lwt res_d = d in
let%lwt res_e = e in
let%lwt res_f = f in
Lwt.return (res_a, res_b, res_c, res_d, res_e, res_f)
let race (promises : 'a t array) : 'a t = Lwt.pick (Stdlib.Array.to_list promises)
let then_ p fn = Lwt.bind fn p
let catch (handler : exn -> 'a t) (promise : 'a t) : 'a t = Lwt.catch (fun () -> promise) handler