【问题标题】:How to make promise fail with an error in clojure?如何使承诺因clojure中的错误而失败?
【发布时间】:2020-02-10 04:02:49
【问题描述】:

我正在尝试在 clojure 中了解 Promise。从文档中,我可以看到我们可以使用 promise 函数创建承诺:

(def p (promise))

我们可以使用deliver这样的函数来解决它

(deliver p 42)

我想了解,我们如何拒绝带有错误或异常的承诺。我已经尝试过文档,但似乎没有帮助。我是函数式编程的新手,我想知道对于失败的 Promise 可能有不同的方法。

【问题讨论】:

  • 你不能只传递一个表示错误的对象吗? (deliver p {:error "Couldn't connect", :other-info "Some info"})。你追求什么行为?
  • 这就是我最终所做的。我正在将 clojure 的承诺与 Javascript 的承诺进行比较,当你拒绝一个承诺时,它会调用代表错误的 catch 块。但这里的promise result 被定制为表示错误或异常
  • 很难比较两种语言的 Promise。 Javascript 老实说功能更丰富。 Clojure 的 promise 基本上只是一个可变容器,可以只接收一次值。如果您查看它的 source,它实际上只是 atom 的包装,其中包含一些协调。

标签: asynchronous clojure promise


【解决方案1】:

您可以使用 fail 函数来拒绝一个承诺。

更多详情请参考this链接。

【讨论】:

  • 虽然您链接的设计文档描述了 fail,但截至 1.10.1 版,它并未在 clojure.core 中实现。
  • 这是一个尚未实施的提案。 fail 应该是 IDeliver 协议的一部分,但该协议尚不存在。
猜你喜欢
  • 2014-05-06
  • 2013-05-18
  • 2014-09-28
  • 2012-06-28
  • 2016-04-24
  • 2017-03-26
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多