在導出的 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 閉包的參數數量。