CompileError:AsyncCompile:Wasm解码失败:预期的魔术字

时间:2019-06-03 12:57:47

标签: javascript unit-testing testing webassembly

在单元测试功能中运行wasm代码时,出现此错误:

CompileError: AsyncCompile: Wasm decoding failed: expected magic word 00 61 73 6d, found 3c 21 44 4f @+0

尽管我已经成功地将已编译的wasm文件添加到目录中,并且主要部分是代码在浏览器中运行,但没有在测试中运行。

测试正在使用磁带运行并已浏览器化。

const imports = {
      env:{
        // paceOp: require('pace').op,
        consoleLog:console.log,
        perform: function(x,y){
          let pixel = options.changePixel(
            pixels.get(x, y, 0),
            pixels.get(x, y, 1),
            pixels.get(x, y, 2),
            pixels.get(x, y, 3),
            x,
            y
          );

          pixels.set(x, y, 0, pixel[0]);
          pixels.set(x, y, 1, pixel[1]);
          pixels.set(x, y, 2, pixel[2]);
          pixels.set(x, y, 3, pixel[3]);
        }
      }
    };
    const inBrowser = (options.inBrowser)?1:0;
    const test = (process.env.TEST)?1:0;
    fetch('./test.wasm').then(response =>
      response.arrayBuffer()
    ).then(bytes =>
      WebAssembly.instantiate(bytes, imports)
    ).then(results => {
      results.instance.exports.manipulatePixel(pixels.shape[0],pixels.shape[1],inBrowser, test);
        extraOperation();
    }).catch(err=>{
      console.log(err)
    });

有人可以帮我吗!! 在此先感谢。

1 个答案:

答案 0 :(得分:0)

传递给fetch()的参数是错误的。

看看您的提取响应值。我想您会发现,当您请求fetch('./test.wasm')时,无论使用哪种Web服务器都将返回一个文档(也许是404)。

我无法说出您的wasm文件相对于此脚本的位置,但是从您对'./'的使用来看,也许您的预期用途是:fetch('test.wasm')?< / p>

您还可以通过重写以下几行来理解我的意思:

fetch('./test.wasm').then(response) {
    console.log("Note the response text value: " + response);
    var ab = response.arrayBuffer();
    return ab;
})

如果您将正确的路径传递到fetch,则此代码的其余部分可能会正常运行。