抛出错误以延迟Clojure

时间:2018-09-11 18:00:40

标签: error-handling clojure deferred

我有一些看起来像这样的代码(d为歧管):

  (if throw-first-error
    (throw
      (d/error!
      (ex-info "Error"
               {:cause "first error"})))
    (-> (do-things-that-could-cause-error)
        (d/catch' (fn [e] (throw
                              (ex-info "Error"
                                     {:cause "second error"})))))))

第二个错误被推迟了,这就是我想要的,因为它在d/catch'中。我也要如何推迟第一个错误,因此它可以被与第二个错误相同的d/catch'调用此代码的函数捕获。谢谢!

1 个答案:

答案 0 :(得分:1)

想通了! d/error-deferred代替了标准的throw解决了这个问题。