我正在努力跟上 WebAssembly 的步伐,主要依赖 WebAssembly developer's guide和最近的 JSConf talk .我可以编译一个 token hello world 程序,我可以查看生成的 HTML 页面来查看结果。到目前为止一切顺利。
问题:JSConf 演讲 18:22建议我可以获取 wasm 文件,从响应中获取数组缓冲区,然后从缓冲区实例化,我应该得到一个 promise 。但是当我尝试这样做时——无论是在最新的 Chrome 稳定版、Chrome 金丝雀版还是最新的 Firefox 中——我反而得到了 type error。 .
错误消息似乎说我需要第二个“importObject”参数,即使 MDN documentation表示此参数是可选的。更糟糕的是 MDN 页面几乎没有谈论该 importObject 的结构和内容。我已经能够从谷歌搜索博客和 github 问题中收集一些想法。看起来我可能需要一个“env”键和一个 WebAssembly 内存对象?
那么...为什么导入对象是必需的,即使它被记录为可选的?在哪里可以找到导入对象的详细文档?为什么它在 JSConf 演讲中有效,但对我却无效?
最佳答案
仅当您实例化的模块不导入任何内容时,才可以省略导入对象。否则,您需要提供一个包含所有必需导入的对象。例如,如果模块做
(import "a" "f" (func ...))
(import "a" "g" (func ...))
(import "b" "m" (memory 0))
然后你需要提供一个导入对象,比如
{
a: {f: function (...) { ... }, g: function (...) {...}},
b: {m: new WebAssembly.Memory(...)}
}
当然,实际的导入值也可以是预定义的对象,或者更有趣的是从另一个 Wasm 实例导出。
关于javascript - WebAssembly:类型错误:WebAssembly 实例化:必须存在导入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48039547/