我在web工作者中使用RequireJS遇到了问题,特别是在处理onmessage处理程序时,worker.js的第一个版本中没有调用这个处理程序。
app.js
var w = new Worker('worker.js');
w.postMessage(someData);
w.onmessage = function(event) {
console.log(event.data);
};worker.js和RequireJS -不工作,但没有错误
importScripts('require.js');
require({ baseUrl: 'foo' },
['dependency1'],
function(dependency1) {
self.onmessage = function (event) { // never called
// do something with event.data...
self.postMessage(data);
};
self.postMessage('debug'); // this one works
}
);worker.js无RequireJS -工作
onmessage = function (event) {
// do something with event.data...
postMessage(data);
};发布于 2014-08-23 01:58:39
这是网络工作者:
require({baseUrl: "../lib"},
["require","timer"], function(Timer) {
self.onmessage = function(event) { console.log("Received"); }
postMessage("In require");
});下面是调用它的模块:
var worker = new Worker('src/workers/worker.js');
worker.postMessage("hello"); //This fails
worker.onmessage = function(event) {
console.log(event);
};但是,从postMessage的按钮调用工作人员成功。我把received找回来了。
由于怀疑异步加载问题,我修改了代码。
var worker = new Worker('src/workers/timer_worker.js');
console.log(worker);
worker.onmessage = function(event) {
console.log(event);
switch(event.data.message) {
case "loaded":
worker.postMessage("hello");
break;
};
};只需让工作人员在完成需求模型中的加载并触发后续代码时发送消息即可。
编辑-这是一个图表,以使它更清楚。onmessage调用是粉红色的:
https://stackoverflow.com/questions/24409289
复制相似问题