【发布时间】:2014-09-28 00:42:09
【问题描述】:
我有一个 Clojure 承诺。当它实现或失败时,我想触发一个动作。如何在 Clojure 中做到这一点?
这里:http://dev.clojure.org/display/design/Promises then 和 recover 被描述,它们应该可以定义这样的回调,但我认为它不在 clojure 核心中。
【问题讨论】:
我有一个 Clojure 承诺。当它实现或失败时,我想触发一个动作。如何在 Clojure 中做到这一点?
这里:http://dev.clojure.org/display/design/Promises then 和 recover 被描述,它们应该可以定义这样的回调,但我认为它不在 clojure 核心中。
【问题讨论】:
我最近完成了一个项目,我需要 Clojure 中的 Promise 和 Futures 的类似功能。经过一番研究,我选择了Cljque。我认为这基本上是对http://dev.clojure.org/display/design/Promises 上讨论的所有内容的概念验证。您可以参加 promises 和futures 来添加回调。它还提供then和recover操作。
如果您需要 Java 8 运行时,那么也许您可以在 java.util.concurrent.CompletableFuture 周围编写一些 Clojure 风格的包装器。
【讨论】:
Clojure Promise 不会失败,因为它们没有绑定到特定的执行线程。快速浏览How do Clojure futures and promises differ?
如果您不介意创建另一个线程,请收听未来或承诺Is there a way to be notified when a clojure future finishes? 显示一个可能的选项。
其他选项是使用一些 Java 库,如 Guava ListenableFuture 或查看新的和花哨的 core.async
【讨论】: