WebAssembly导出的函数返回未定义的

时间:2019-08-19 00:36:58

标签: webassembly

我正在为我的JavaScript应用程序在WebWorker线程上运行wasm-flate

使用:

<script src="https://unpkg.com/wasm-flate@0.1.11-alpha/dist/bootstrap.js"></script>

可以很好地将Flate对象放入主线程,但是为了使其在WebWorker上正常工作,我使用了

wapm install drbh/flate

,然后获取已编译的.wasm代码,并尝试通过以下方式将其加载到WebWorker上:

fetch("../lib/wasm_flate_bg.wasm")
.then(function(response){
    response.arrayBuffer()
        .then(function(buffer){
            WebAssembly.compile(buffer)
            .then(function(obj){
                WebAssembly.instantiate(obj)
                    .then(function(skee){
                        flate=skee;
                        console.log(flate);
                        console.log(flate.exports);
                        console.log(flate.exports.zlib_encode);
                        console.log(flate.exports.zlib_encode('420'));
                    });
            });
        });
});

所有这些都有效,直到我实际运行zlib_encode函数为止。由于某些原因,它总是返回未定义的,所有函数似乎都如此。但是,通过.HTML加载时,它们可以正常工作。

所以,我的问题是,我在这里误解了什么,该如何解决? 谢谢。

1 个答案:

答案 0 :(得分:0)

WebAssembly函数仅对数字起作用。对于zlib_encode()这样的高级接口,您需要JavaScript中的包装函数,该函数与WebAssembly模块导出的低级定义进行接口。

在wasm-flate中,这些似乎由https://unpkg.com/wasm-flate@0.1.11-alpha/dist/0.bootstrap.js提供,并在https://github.com/drbh/wasm-flate/blob/master/src/lib.rs中定义。