catch

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

#![allow(unused)]
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 实现了捕获异常,我们一定会添加支持!