Files
shiny/R/async.R
2018-02-09 11:12:45 -08:00

21 lines
424 B
R

#' @export
call_async <- function(func, ..., args = NULL) {
if (missing(args))
args <- list(...)
rx <- callr::r_bg(rlang::as_function(func), args)
promises::promise(function(resolve, reject) {
task <- function() {
if (rx$is_alive()) {
later::later(task, 0.1)
} else {
tryCatch(
resolve(rx$get_result()),
error = reject
)
}
}
task()
})
}