javascript - WebAssembly:类型错误:WebAssembly 实例化:必须存在导入参数

标签 javascript webassembly

我正在努力跟上 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/

相关文章:

vue.js - 无法在Vue组件中加载WASM

javascript - 使用 WebAssembly 在 Canvas 上绘制系列图像是否更快?

javascript - 获取 WebAssembly 导出函数的地址?

javascript - AngularJS 编辑按钮只能工作一次,然后出现 TypeError : l is not a function

javascript - 从对象 : object. 中调用函数 function()

javascript - 如何访问 localStorage 或模拟 localStorage 以进行 Jest + vue-test-utils 测试?

javascript - 如何找到 WebAssembly 缓冲区的地址并将其返回给 Javascript?

c - WebAssembly:(f32.const nan:0x200000) 表示 0x7fa00000 或 0x7fe00000

javascript - XMLHttpRequest.upload 进度事件仅适用于 IE

javascript - kendo Ui - 网格不调用 Controller