我正在尝试研究如何使用 Rust 和 wasm-bindgen 调用 JavaScript 函数。由于缺乏浏览器支持,我无法将 wasm-bindgen 与 ES6 模块与 Web Worker 一起使用。
据我所知,在 Rust 端声明存在供我调用的 JavaScript 函数很简单
#[wasm_bindgen]
extern {
fn logProgress(percent: f64);
}
但是,我不知道在哪里定义 JavaScript 实现。如果我尝试从 JavaScript 调用未定义的 Rust 函数,logProgress
那么我会收到运行时错误:Error: logProgress is not defined
我可以从 wasm-bindgen 文档中看到,如果我将 wasm-bindgen 与 ES6 模块一起使用,那么我可以将 rust 代码更改为
#[wasm_bindgen(module = "/progress.js")]
extern {
fn logProgress(percent: f64);
}
并在其中声明 JavaScript 函数progress.js
export function logProgress(percent) {
console.log(percent)
// actual implementation would not just log
}
由于我改为通过wasm_bindgen
全局导入我的 Rust API,我认为我应该能够在我的 Web Worker 的同一部分附近的某个地方定义实现,但我已经搜索了很多文档并且找不到任何关于如何做这个。
importScripts('foo_wasm.js')
wasm_bindgen('foo_wasm_bg.wasm').then(fooWasmModule => {
memory = fooWasmModule.memory
const { Foo, Bar, Baz, foobar } = wasm_bindgen;
// JS has 'imported' the Rust structs and functions
// How to 'export' the JS functions to Rust?
}