Rust编译成WASM后怎么在浏览器里调用导出的函数?
我用wasm-pack build把Rust代码编译成了WebAssembly,也生成了js绑定文件,但在浏览器里import之后调用导出的函数一直报错,说函数未定义。是我漏了什么初始化步骤吗?
我的Rust函数是这么写的:
#[wasm_bindgen]
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
然后在JS里这样引入:
import { greet } from './pkg/my_wasm.js';
console.log(greet('Alice'));
但控制台提示greet is not a function,是不是得先等WASM加载完?该怎么正确调用?
正确写法:
或者用 top-level await(如果你的构建工具支持):
init() 返回的是 Promise,你得等它 resolve 之后,greet 这些导出的函数才会被注入到模块里。直接 import 就调用的话,WASM 还没加载完呢,可不就是 undefined 么。
如果你用的是动态 import,姿势又不一样:
总之记住一点:wasm-pack 生成的绑定文件不是同步可用的,必须先 await init(),然后才能调函数。