【发布时间】:2021-07-29 21:35:56
【问题描述】:
我试过了
js.Global().Call("throw", "yeet")
回来了
恐慌:1:1:预期的操作数,找到“类型”[已恢复] wasm_exec.f7bab17184626fa7f3ebe6c157d4026825842d39bfae444ef945e60ec7d3b0f1.js:51 恐慌:系统调用/js:Value.Call:属性抛出不是函数,未定义
我看到syscall/js 中定义了一个Error 类型,但没有什么可以抛出它https://golang.org/pkg/syscall/js/#Error
【问题讨论】:
-
写一个简单的 JS 函数抛出参数然后让 Go 调用那个函数怎么样?
-
@leafbebop 很棒的建议,虽然这会导致恐慌并且 js 胶水会抛出一堆奇怪的错误,比如
errors.ts:19 Uncaught Error: (intermediate value)(intermediate value)(intermediate value).create is not a function。我可能会有更好的时间以自己的方式返回错误消息 -
我认为从 wasm 引发异常的惯用方法是引入 trap,但看起来
syscall/js还不支持。 documentation forsyscall/js声明它是实验性的,并不打算作为一个完整的 API 运行,因此它可能会在未来实现。 -
Error类型仅用于允许在 wasm 执行期间发生的字符串化错误(请参阅the source)。如果你调用一个 JS 函数并抛出异常,你会看到panic: Javascript error: {ERROR_MESSAGE}。
标签: javascript go webassembly