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 实现捕获异常,我们肯定也会添加支持!