我在看promises
包,但我不知道如何真正让承诺做任何事情。所有可用的阻塞机制(如promise_all
)都返回一个承诺,而且似乎没有明显的方法让承诺首先执行。例如,给定以下代码片段:
library(promises)
p <- promise(~ {
print("executing promise")
}) %>% then(~ {
print("promise is done")
})
print("we are here")
done <- FALSE
all_promises <- promise_all(p) %>% then(~ {
print("all promises done")
done <<- TRUE
})
# output:
# [1] "executing promise"
# [1] "we are here"
我如何实际调用承诺链?
奇怪的是,如果我将第一个承诺更改为 afuture_promise
并添加一个运行循环,如
while(!done) {
later::run_now()
Sys.sleep(0.01)
}
承诺链正确执行。但是,这不适用于常规承诺。
我错过了什么?看来系统缺少执行者,但是我在哪里获得执行者?我在包本身中看不到任何内容,并且没有用户可见的 API 用于查询我可以看到的承诺。