我主要依靠WebAssembly developer's guide和最新的JSConf talk,努力跟上WebAssembly的步伐。我可以编译一个令牌hello world程序,并且可以查看生成的HTML页面来查看结果。到目前一切尚好。
问题:18:22的JSConf演讲建议我可以获取wasm文件,从响应中获取数组缓冲区,然后从缓冲区实例化,我应该得到一个承诺。但当我尝试这样做时--无论是在最新的Chrome稳定版、Chrome canary,还是最新的火狐浏览器中--我得到的都是一台type error。
错误消息似乎是说我需要第二个"importObject“参数,尽管MDN documentation说这个参数是可选的。更糟糕的是,MDN页面几乎没有讨论该importObject的结构和内容。我已经能够从谷歌上搜索博客和github问题中收集到一些想法。看起来我可能需要一个"env“键和一个WebAssembly内存对象?
所以..。为什么导入对象是必需的,即使在文档中它是可选的?在哪里可以找到导入对象的详细文档?为什么它在JSConf talk中有效,而不适用于我?
发布于 2017-12-31 17:45:26
仅当您实例化的模块没有导入任何内容时,才能省略导入对象。否则,您需要提供一个包含所有所需导入的对象。例如,如果模块这样做
(import "a" "f" (func ...))
(import "a" "g" (func ...))
(import "b" "m" (memory 0))然后您需要提供一个导入对象,如
{
a: {f: function (...) { ... }, g: function (...) {...}},
b: {m: new WebAssembly.Memory(...)}
}当然,实际的导入值也可以是预定义的对象,或者更有趣的是从另一个Wasm实例导出。
https://stackoverflow.com/questions/48039547
复制相似问题