Fmlib_browser.Task
Tasks to be performed within Commands
type http_error = [
|
`Http_status of int
|
`Http_no_json
Resource is not a valid json file
*)|
`Http_decode
Resource is a valid json file, but the decoder could not decode the corresponding javascript object.
*) ]
val succeed : 'a -> ('a, 'e) t
succeed a
Task which immediately succeeds with value a
.
val fail : 'e -> ('a, 'e) t
fail e
Task which immediately fails with the error e
.
val result : ('a, 'e) Stdlib.result -> ('a, 'e) t
result res
Task which immediately succeeds or fails depending on res
The effect of the function is described by the code
match res with
| Ok a -> succeed a
| Error e -> fail e
task >>= f
First execute task
. If it fails then the function fails. If task
succeeds with the result a
then execute the task f a
.
More convenient syntax for the monadic bind operator (>>=)
.
The code
let* a = task in
f a
is equivalent to
task >>= f
With the let*
operator it is more convenient to chain tasks.
let* a = t1 in
let* b = t2 a in
let* c = t3 a b in
...
return f a b c ...
map f task
Map the success result of task
via the function f
.
make_succeed f task
Convert the task which might fail into a task which always succeeds by converting the positive or negative result via the function f
into a new result.
parallel accu_start accumulate task_list
Run all the tasks in the task list in parallel. Collect the results of the individual tasks via the function accumulate
into the accumulator. If all tasks of the list have finished, return the accumulator.
Note that the tasks of the list do not return errors. If they can have errors then make_succeed
can be used to encode the error into the result type 'a
.
val log_string : string -> (unit, 'e) t
log_string str
Write str
to the console.
send_to_javascript value
Send the javascript object value
to the surrounding javascript world.
val sleep : int -> 'a -> ('a, 'e) t
sleep millis a
Sleep for millis
milliseconds and then return a
.
Examples:
let* _ = sleep 1000 () in (* sleep 1000 milliseconds *)
task (* and then execute [task] *)
let* a = task1 >>= sleep 1000 (* excute [task1] and return result
[a] after 1000 milliseconds *)
in
task2 a (* then execute [task2 a] *)
val next_tick : 'a -> ('a, 'e) t
next_tick a
Return a
in the next tick of the event loop.
Example: Execute task
in the next round of the event loop.
let* _ = next_tick () in
task
val time_zone : (Time.Zone.t, 'e) t
Get the current time zone.
random ran
Execute the random generator rand
and return the generated random value.
val http_text :
string ->
string ->
(string * string) list ->
string ->
(string, http_error) t
http_text method url headers body
Make a http method
request to url
with headers
and body
. Expect the response as a string.
Method is one of GET, POST, DELETE, ...
.
The headers and the body can be empty.
val http_json :
string ->
string ->
(string * string) list ->
string ->
'a Decoder.t ->
('a, http_error) t
http_json method url headers body decoder
Same as http_text
but the response is expected as a valid json string which is converted to a javascript object and decoded by decoder
.