如何使用带有--target no-modules的wasm-bindgen导入JavaScript函数?

问题描述

我正在尝试弄清楚如何使用Rust和wasm-bindgen调用JavaScript函数。由于lack of browser support,我无法将wasm-bindgen与ES6模块以及Web Worker一起使用。

据我所知,声明存在一个JavaScript函数供我在Rust端调用很简单

#[wasm_bindgen]
extern {
    fn logProgress(percent: f64);
}

但是我不知道在哪里定义JavaScript实现。如果我尝试从JavaScript中调用未定义的logProgress调用Rust函数,则会收到运行时错误Error: logProgress is not defined

从wasm-bindgen文档中可以看到,如果我将wasm-bindgen与ES6模块一起使用,则可以将rust代码更改为

#[wasm_bindgen(module = "/progress.js")]
extern {
    fn logProgress(percent: f64);
}

并在progress.js

中声明JavaScript函数
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?
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...