Good afternoon!
I'm building a shiny app that will be integrating the future and promises package. I have a unique need when the user saves their work, the end results of the promises will need to be saved to a database. This will require me to extract the results of the promise.
I was able to create the following functions to interact with promises. I am able to get the state of the promise, and the end value with get_promise_state() and get_promise_value(). The problem is, if at the time of running get_promise_value() the promises aren't fulfilled, the function will return NULL. I tried a while statement to wait until the promise is fulfilled, but it doesn't seem to be working. I think that when the promise is passed to get_promise_value_wait() the state of the promise at that moment is getting passed. I was hoping this function would work similarily to future::value()
Does anyone have any suggestions?
library(tidyverse)
library(promises)
library(future)
plan(multisession)
get_promise_state <- function(x){
environment(x[['then']])[['private']][['state']]
}
is_promise_resolved <- function(x){
get_promise_state(x) == 'fulfilled'
}
get_promise_value <- function(x){
environment(x[['then']])[['private']][['value']]
}
get_promise_value_wait <- function(x) {
while (!is_promise_resolved(x)) {
state <- get_promise_state(x)
message(state)
if (state == 'rejected') stop('Promise Rejected')
Sys.sleep(1)
}
get_promise_value(x)
}
p1 <- future({
Sys.sleep(5)
mtcars
})
p2 <- p1 %...>% filter(cyl == '6')
get_promise_state(p2)
get_promise_value(p2)
is_promise_resolved(p2)
get_promise_value_wait(p2)