给定以下(简化的)Rust 代码:
#[wasm_bindgen(js_name = MyClass)]
pub struct MyClassJs {
my_struct: MyStruct,
}
#[wasm_bindgen(js_class = MyClass)]
impl MyClassJs {
#[wasm_bindgen(constructor)]
pub async fn new() -> Result<MyClassJs, JsValue> {
// ...
}
}
使用 编译wasm-pack
,此建议来自wasm-bindgen书:
// Note that a dynamic `import` statement here is required due to
// webpack/webpack#6615, but in theory `import { greet } from './pkg';`
// will work here one day as well!
const rust = import('./pkg');
rust
.then(m => m.greet('World!'))
.catch(console.error);
前面的声明让我相信,在 Promise 解决之前,进行任何与 rust-wasm 相关的调用都是非法的。
这提出了一个问题:这些陈述中哪一个是正确的?
new MyClassJs()
任何时候(甚至在 Promise 解决之前)调用是否合法?- 仅在 Promise 解决后调用是否合法
new MyClassJs()
(但在任何地方,包括then
回调之外? new MyClassJs()
只在回调内部调用是否合法then
?
我尝试使用这些资源找到答案,但发现它们不包含我的问题的答案:
- https://rustwasm.github.io/docs/book/
- https://rustwasm.github.io/docs/wasm-pack/
- https://rustwasm.github.io/wasm-bindgen/
编辑:我目前在 webpack 4 上。