2024 Clojure 状态调查! 中分享你的想法。

欢迎!请访问 关于 页面,了解更多关于如何使用本平台的信息。

0
core.async

在 ClojureScript 中,将 `catch :default e ...` 放置于 `go` 代码块中,会因非 `js/Error` 类别的错误而失败。也就是说,抛出数值、字符串等类型的错误将会失败(尽管这通常不是一个好的实践,但即便如此)。

以下是一些测试用例:

`
(defn test0
"打印 'Error: nil'。"
(link: )
(go (println "Error:"

    (<! (go (throw (js/Error.)))))))

(defn test1
"打印 'Error: #object(link: Error Error)'。"
(link: )
(go (println "Error:"

    (<! (go (try (throw (js/Error.))
                 (catch :default e e)))))))

(defn test2
"除了控制台错误消息 msg 外,不打印任何内容
msg. Chrome 显示 '未捕获 123'。"
(link: )
(go (println "Error:"

    (<! (go (try (throw 123)
                 (catch :default e e)))))))

`

test2 应打印 'Error: 123',但实际上没有。

(作为一个附加说明,难道 test0 不应该直接返回抛出的 js/Error 而不是打印控制台中的未捕获错误并返回 nil 吗?)

2 个答案

0

由 alexandergunnarson 发表的评论:

抱歉,我应该指出这是针对 ClojureScript 版本 1.9.93 和 core.async 版本 0.2.385。也请原谅缺少了标记。

0
参考:https://clojure.atlassian.net/browse/ASYNC-172 (由 alex+import 报告)
...