无法使用从 WebAssembly 模块导出的函数?

Posted

技术标签:

【中文标题】无法使用从 WebAssembly 模块导出的函数?【英文标题】:Unable to use exported function from WebAssembly module? 【发布时间】:2017-08-15 17:56:41 【问题描述】:

以下 javascript 代码抛出错误myMathModule.exports is undefined

<script>
fetch("test.wasm")
    .then(function(response) 
        return response.arrayBuffer();
    )
    .then(function(buffer) 
        var moduleBufferView = new Uint8Array(buffer);
        var myMathModule = WebAssembly.instantiate(moduleBufferView);


        for(var i = 0; i < 5; i++) 
            console.log(myMathModule.exports.doubleExp(i));
        
    );
</script>

test.wasm 导出doubleExp 函数。

【问题讨论】:

【参考方案1】:

WebAssembly.instantiate 是一个承诺。您正在尝试使用承诺在完成时返回的WebAssembly.Instance。类似的东西

fetch("test.wasm")
.then(function(response) 
    return response.arrayBuffer();
)
.then(function(buffer) 
    var moduleBufferView = new Uint8Array(buffer);
    WebAssembly.instantiate(moduleBufferView)
    .then(function(instantiated) 
        const instance = instantiated.instance;
        console.log(instance.exports.doubleExp(i));
    )
);

【讨论】:

以上是关于无法使用从 WebAssembly 模块导出的函数?的主要内容,如果未能解决你的问题,请参考以下文章

从 JavaScript 终止 WebAssembly

为什么说 WebAssembly 是 Web 的未来?

WebAssembly:将命名空间从 C++ 库导出到 JavaScript

WebAssembly技术_JS调用C函数示例_传递参数方法导出

如何从 WebAssembly 函数返回 JavaScript 字符串

无法从导出的 firebase 函数中引用未导出的 firebase 函数