我正在为我的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加载时,它们可以正常工作。
所以,我的问题是,我在这里误解了什么,该如何解决? 谢谢。
答案 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中定义。