2024 年 Clojure 调查 中分享您的想法!

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

0
core.async

在 ClojureScript 中,`go` 块内的 `(catch :default e ...) ` 会因为非 `js/Error` 类型的错误而失败。也就是说,抛出一个数字、字符串等都会失败(尽管这种情况很少见,但仍然存在)。我在将 Slingshot (scgilardi/slingshot) 迁移到 CLJS 时遇到了这个问题。

以下是一些测试用例

`
(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. Chrome 显示 'Uncaught 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 报告)
...