gpt4 book ai didi

javascript - Web Worker 中的 RequireJS – 未调用 onmessage

转载 作者:行者123 更新时间:2023-11-29 19:38:28 25 4
gpt4 key购买 nike

我在 Web Worker 中使用 RequireJS 时遇到了问题,尤其是在 worker.js 的第一个版本中未调用的 onmessage 处理程序。

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);
};

最佳答案

这是网络 worker :

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);
};

但是,从向工作人员发送消息的按钮调用会成功。我收到了 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;
};
};

只需让工作人员在 require 模型中完成加载后发送一条消息,并触发您的后续代码作为响应。

编辑 - 这是一个图表,可以使它更清楚。 onmessage 调用是粉红色的:

UML sequence diagram showing web worker synchronization

关于javascript - Web Worker 中的 RequireJS – 未调用 onmessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24409289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com