Javascript web worker使用web程序集时出错
我想在web worker中使用WebAssembly 在我的主应用程序中,我按如下方式启动它:Javascript web worker使用web程序集时出错,javascript,c,emscripten,webassembly,Javascript,C,Emscripten,Webassembly,我想在web worker中使用WebAssembly 在我的主应用程序中,我按如下方式启动它: let w = new Worker('test.js'); w.onmessage = (event) => { console.log(event); }; w.onerror = (event) => { console.error(event); }; w.postMessage({ message: "Hello World" }); 然后,我创建了一个文件test.js,如
let w = new Worker('test.js');
w.onmessage = (event) => { console.log(event); };
w.onerror = (event) => { console.error(event); };
w.postMessage({ message: "Hello World" });
然后,我创建了一个文件test.js
,如下所示:
self.Module = {
locateFile: function (s) {
console.log(s);
return s;
}
};
self.importScripts("main.js");
// note: `main.js` is the JavaScript glue file created by emcc
self.onmessage = function(messageEvent) {
console.log(messageEvent); // works!
console.log(self.Module); // works!
console.log(self.Module.ccall("test")); // crashes!
}
我收到一个错误:未捕获类型错误:无法读取未定义的属性“apply”
。我不明白为什么self.Module
没有定义,这怎么可能
我感觉web worker和WebAssembly的范围有些地方不能很好地协同工作
谢谢你的意见 问题在于console.log()没有显示对象在执行时的真实状态。进一步挖掘发现,实际上,对象
模块尚未准备就绪
我引述:
如何判断页面何时已完全加载,调用编译后的函数是否安全?
在页面完全加载之前调用已编译函数可能会导致
在错误中,如果函数依赖可能不存在的文件
[……]
另一个选项是定义
onRuntimeInitialized函数:
Module['onRuntimeInitialized']=function(){…}代码>
当运行时准备就绪并且您可以调用编译后的代码时,将调用该方法
调整mytest.js
(worker)文件修复了以下问题:
self.Module = {
locateFile: function (s) {
console.log(s);
return s;
}
// Add this function
onRuntimeInitialized: function() {
test();
}
};
self.importScripts("main.js");
// note: `main.js` is the JavaScript glue file created by emcc
self.data = {};
// to pass data from the main JS file
self.onmessage = function(messageEvent) {
console.log(messageEvent); // works!
self.data = messageEvent; // save the data
}
// gets executed when everything is ready.
self.test = function() {
// we may safely use self.data and self.Module now!
console.log(self.Module.ccall("test")); // works!
}