在导出的 Rust 函数中接收 JavaScript 闭包
您可以使用 js-sys
crate 来访问 JavaScript 的 Function
类型,并通过 Function.prototype.apply
和 Function.prototype.call
调用该函数。
例如,我们可以将一个 Vec<u32>
包装在一个新的类型中,将其导出到 JavaScript,并对 Vec
的每个成员调用一个 JavaScript 闭包
# #![allow(unused_variables)] #fn main() { use wasm_bindgen::prelude::*; #[wasm_bindgen] pub struct VecU32 { xs: Vec<u32>, } #[wasm_bindgen] impl VecU32 { pub fn each(&self, f: &js_sys::Function) { let this = JsValue::null(); for &x in &self.xs { let x = JsValue::from(x); let _ = f.call1(&this, &x); } } } #}
由于 Rust 没有函数重载,call#
方法还需要一个数字,表示传递给 JavaScript 闭包的参数数量。