{mirai} supplies its own as.promise()
method, allowing it to be used as a promise from the promises
package.
These promises are innovative, event-driven promises, developed in collaboration with Joe Cheng.
later
loop like other promises.A ‘mirai’ may be piped directly using the promise pipe &...>%
, which implicitly calls as.promise()
on the ‘mirai’. Similarly all promise-aware functions such as promises::then()
or shiny::ExtendedTask$new()
which take a promise can also take a ‘mirai’ (using promises
>= 1.3.0).
Alternatively, it may be converted into a promise by as.promise()
, which then allows using the methods $then()
, $finally()
etc.
The following example outputs “hello” to the console after one second when the ‘mirai’ resolves.
library(mirai)
library(promises)
p <- mirai({Sys.sleep(1); "hello"}) %...>% cat()
p
#> <Promise [pending]>
It is possible to both access a ‘mirai’ value at $data
and to use a promise for enacting a side effect (assigning the value to an environment in the example below).
library(mirai)
env <- new.env()
m <- mirai({
Sys.sleep(1)
"hello"
})
promises::then(m, function(x) env$res <- x)
call_mirai(m)$data
#> [1] "hello"
After returning to the top level prompt:
env$res
#> [1] "hello"