5

我正在尝试研究如何使用 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?
}
4

0 回答 0