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 表示 '未捕获 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 报告)
...