Javascript 无法从WebWorker内部访问某些函数和变量
我在从我创建的web worker内部的main调用函数时遇到问题。我用Java语言创建了一个类似于enum的对象:Javascript 无法从WebWorker内部访问某些函数和变量,javascript,html,frontend,web-worker,Javascript,Html,Frontend,Web Worker,我在从我创建的web worker内部的main调用函数时遇到问题。我用Java语言创建了一个类似于enum的对象: const states = { START: 'start', ADDCHAR: 'addchar', WORDBEFORE: 'wordbefore', REMOVECHAR: 'removechar', RESET: 'reset' } 每个元素都有一个状态,我在下面的代码中使用: self.addEventListene
const states = {
START: 'start',
ADDCHAR: 'addchar',
WORDBEFORE: 'wordbefore',
REMOVECHAR: 'removechar',
RESET: 'reset'
}
每个元素都有一个状态,我在下面的代码中使用:
self.addEventListener('message', function(e) {
while( true ){
switch ( state ){
case states.START:
start();
state = states.ADDCHAR;
case states.ADDCHAR:
addchar();
state = states.WORDBEFORE;
case states.WORDBEFORE:
sleep(3000);
state = states.REMOVECHAR;
case states.REMOVECHAR:
removeChar();
state = states.RESET;
case states.RESET:
reset();
state = states.START;
}
sleep(1000);
}
});
问题是我无法从main访问函数:start()
,addchar()
等
如何从web worker内部实现这些功能?我从main向web worker发送消息,但从web worker到main的“连接”不起作用(仍然发送消息并不能解决我的所有问题,因为我必须在switch语句中从main调用特定函数)
我试图对代码进行多次修改,但没有成功。浏览器窗口中加载的JavaScript脚本范围内的函数和全局变量对于web工作人员来说是不可访问的 您可以使用
importScripts
将它们导入到您的工作人员
引述:
工作线程可以访问全局函数importScripts(),该函数允许它们导入脚本。它接受零个或多个URI作为要导入的资源的参数;以下所有示例均有效:
sleep(1000)代码>这不是javascript中的事情。我怀疑你在做空闲等待,这真的很糟糕,消耗了整个CPU核心。使用setTimeout
,最好使用async
功能。这样的代码是导致浏览器消耗如此多CPU的原因。
importScripts(); /* imports nothing */
importScripts('foo.js'); /* imports just "foo.js" */
importScripts('foo.js', 'bar.js'); /* imports two scripts */
importScripts('//example.com/hello.js'); /* You can import scripts from other origins */