【发布时间】: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