当我运行以下代码时,我得到一个Uncaught (in promise) TypeError: second argument must be an object
错误:
async function loadWasm(url) {
const fetchPromise = fetch(url)
const { module, instance } = await WebAssembly.instantiateStreaming(fetchPromise)
// [...]
}
loadWasm('http://localhost:3000/path/to/file.wasm')
查看文档,它说WebAssembly.instantiateStreaming
(importObject
)的第二个参数是可选的,所以我不明白为什么浏览器使它成为强制性的,尽管如此?
我已经在Firefox 78.7.0esr(64位)和Chrome 88.0.4324.96(官方版本)(64位)中测试过了。如果这些代码很重要,可以在ruby on rails 6.1应用程序中使用webpack 5进行翻译。
更新:
我在mdn的github存储库上打开了一个问题,认为文档可能需要更新。到目前为止,似乎文档是好的,所以它可能是一个实现问题。
更新:
这既不是实现问题,也不是文档错误。我把我对这个问题的结论贴在下面的答案里。
https://github.com/WebAssembly/spec/issues/1284#issuecomment-772286062
只有当你实例化的模块实际导入了一些东西时才需要。
它在文档中被标记为可选是因为它并不总是需要的,而不是因为我们可以选择提供或不提供它。是wasm包决定了它是可选的还是必需的。