Asynchronous 如何使承诺在clojure中因错误而失败?

Asynchronous 如何使承诺在clojure中因错误而失败?,asynchronous,clojure,promise,Asynchronous,Clojure,Promise,我正试图在clojure学习。从文档中,我可以看到我们可以使用promise功能创建promise: (def p(promise)) 我们可以用这样的函数来解决它 (第42页交付) 我想理解,我们怎么能拒绝一个错误或例外的承诺。我试过docs,但似乎没用。我对函数式编程还不熟悉,我想知道有没有一种不同的方法来拒绝失败的承诺。你可以使用fail函数来拒绝承诺 有关更多详细信息,请参阅链接。您不能只传递表示错误的对象吗(传递p{:error“无法连接”,:其他信息“某些信息”})。你在追求什么样的

我正试图在clojure学习。从文档中,我可以看到我们可以使用promise功能创建promise:

(def p(promise))

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

(第42页交付)


我想理解,我们怎么能拒绝一个错误或例外的承诺。我试过docs,但似乎没用。我对函数式编程还不熟悉,我想知道有没有一种不同的方法来拒绝失败的承诺。

你可以使用fail函数来拒绝承诺


有关更多详细信息,请参阅链接。

您不能只传递表示错误的对象吗<代码>(传递p{:error“无法连接”,:其他信息“某些信息”})。你在追求什么样的行为?那就是我最后做的。我将clojure的承诺与Javascript的承诺进行了比较,当您拒绝一个承诺时,它会调用表示错误的
catch
块。但是在这里,
promise result
是定制的,用于表示错误或例外。很难比较两种语言中的承诺。Javascript的功能更加丰富。Clojure的承诺基本上只是一个可变容器,可以只接收一次值。如果你看一下它,它实际上只是包含一些协调的
atom
上的一个包装器。虽然你链接的设计文档描述了
fail
,但从1.10.1版开始,它没有在
clojure.core
中实现。这是一个尚未实现的建议
fail
应该是
IDeliver
协议的一部分,但该协议还不存在。