在 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 吗?)