请在2024 Clojure状态调查!中分享您的想法。

欢迎!有关如何使用本站的信息,请参阅关于页面。

0 投票
core.async

以下代码将触发失败的断言(ioc_helpers.cljs:155)
当整个代码块一起评估时,并且当仅评估
try时,能够正确捕获Error。
finally块仅在内部块被评估时才会运行

`
(go
(try

(throw (js/Error. "asdf"))
(catch ExceptionInfo e
  (println "ExceptionInfo"))
(catch js/Error e
  (println "js/Error"))
(finally
  (println "finally"))))

`

另一个值得注意的是,改变`catch`块
的顺序将改变行为:如果`(catch js/Error ...)
是第一个catch块,那么它将像预期的那样工作。

3 个答案

0 投票

评论者:hiredman

这似乎与http://dev.clojure.org/jira/browse/ASYNC-169非常相似,async-169在库的clojure一侧,但看起来两侧都有相似的异常处理逻辑问题

0 投票

评论者:jmlsf

类似问题,但没有finally块

`
(defn test-go-exception
[]
(go

(try
  (throw (new js/TypeError "unexpected"))
  (catch ExceptionInfo e
    (js/console.log "test-go-exception: ExceptionInfo catch"))
  (catch :default e
    (print "test-go-exception: default catch")))))

(test-go-exception)
;; 抛出异常 "ioc_helpers.cljs:146 未经捕获的错误:没有匹配的条款"
`

0 投票
参考:https://clojure.atlassian.net/browse/ASYNC-73 (来自the-kenny的报道)
...