Rust编译成WASM后如何在浏览器中调用异步函数?

码农怡冉 阅读 4

我用wasm-pack把Rust代码编译成了WebAssembly,但在前端调用返回Promise的异步函数时总是报错,说找不到对应的导出方法。明明在Rust里用了#[wasm_bindgen]async,是不是还需要额外配置?

这是我的Rust代码:

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub async fn fetch_data() -> Result<String, JsValue> {
    // 模拟异步操作
    Ok("done".into())
}

在JS里直接调用fetch_data()就报TypeError: pkg.fetch_data is not a function,到底哪里漏了?

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
设计师翌喆
async函数用#[wasm_bindgen]导出后在JS端调用方式是完全一样的,会自动返回Promise,不需要额外配置。

问题大概率是你导入方式错了,或者没等wasm初始化完成就调用了。

JS端这样写:

import init, { fetch_data } from './pkg/your_crate';

async function run() {
await init(); // 先等WASM初始化
const result = await fetch_data(); // 直接调用,会返回Promise
console.log(result);
}

run();


重点:必须先调init()完成WASM初始化,之后才能调用导出的函数。
点赞
2026-03-14 10:01