【问题标题】:How to listen to a Clojure promise when it is was realized or failed?如何在实现或失败时收听 Clojure 承诺?
【发布时间】:2014-09-28 00:42:09
【问题描述】:

我有一个 Clojure 承诺。当它实现或失败时,我想触发一个动作。如何在 Clojure 中做到这一点?

这里:http://dev.clojure.org/display/design/Promises thenrecover 被描述,它们应该可以定义这样的回调,但我认为它不在 clojure 核心中。

【问题讨论】:

    标签: clojure callback promise


    【解决方案1】:

    我最近完成了一个项目,我需要 Clojure 中的 Promise 和 Futures 的类似功能。经过一番研究,我选择了Cljque。我认为这基本上是对http://dev.clojure.org/display/design/Promises 上讨论的所有内容的概念验证。您可以参加 promises 和futures 来添加回调。它还提供thenrecover操作。


    如果您需要 Java 8 运行时,那么也许您可以在 java.util.concurrent.CompletableFuture 周围编写一些 Clojure 风格的包装器。

    【讨论】:

    • 它是存档和实验性的。在此基础上进行构建可能并不好。感谢您指出它。
    • @fifigyuri - 我没有遇到任何问题 - 但这并不意味着没有任何错误。但是,使用 Clique 可能比从头开始推出自己的解决方案更不容易出错,即使它是“实验性的”。如果您能找到积极维护的东西,那可能会更好,但如果最终您找不到任何东西,至少这会给您一个不错的起点。另外,请参阅我的编辑。
    【解决方案2】:

    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

    【讨论】:

    • 感谢您的回答,使用 code.async 通道提供了一个干净的解决方案。
    猜你喜欢
    • 2020-02-10
    • 2019-02-15
    • 2015-07-23
    • 2021-10-12
    • 2012-06-28
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多