r-如何实际援引承诺



我在看promises包,但我不知道如何真正让promise做任何事情。所有可用的阻塞机制(如promise_all(都返回一个promise,而且似乎没有明显的方法让promise首先执行。例如,给定以下代码片段:

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"

如何实际调用promise链?

奇怪的是,如果我将第一个promise更改为future_promise,并像中那样添加一个运行循环

while(!done) {
later::run_now()
Sys.sleep(0.01)
}

promise链执行正确。不过,这与常规承诺不起作用。

我错过了什么?这个系统似乎缺少一个执行人,但我从哪里得到执行人?我在包本身中看不到任何东西,也没有用户可见的API来查询我能看到的承诺。

原来我使用API不正确。promise表达式应该调用continuation回调。我错过了那个细节。所以这是有效的:

library(promises)
p <- promise(~ {
print("executing promise")
resolve(1)
}) %>% then(~ {
print("promise is done")
})
print("we are here")
done <- FALSE
all_promises <- promise_all(p) %>% then(~ {
print("all promises done")
done <<- TRUE
})
while(!done) {
later::run_now()
Sys.sleep(0.1)
}

相关内容

  • 没有找到相关文章

最新更新