catch

catch 属性允许捕获 JavaScript 异常。它可以附加到任何导入的函数或方法,并且该函数必须返回一个 Result,其中 Err 负载是一个 JsValue


# #![allow(unused_variables)]
#fn main() {
#[wasm_bindgen]
extern "C" {
    // `catch` on a standalone function.
    #[wasm_bindgen(catch)]
    fn foo() -> Result<(), JsValue>;

    // `catch` on a method.
    type Zoidberg;
    #[wasm_bindgen(catch, method)]
    fn woop_woop_woop(this: &Zoidberg) -> Result<u32, JsValue>;
}
#}

如果调用导入的函数抛出异常,则将返回带有引发的异常的 Err。否则,将返回带有函数结果的 Ok

默认情况下,当 Wasm 调用最终抛出异常的 JS 函数时,wasm-bindgen 将不执行任何操作。Wasm 规范目前不支持堆栈展开,因此 Rust 代码不会执行析构函数。这不幸地会导致 Rust 中出现内存泄漏,但是一旦 Wasm 实现捕获异常,我们肯定也会添加支持!