Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法从WebWorker内部访问某些函数和变量_Javascript_Html_Frontend_Web Worker - Fatal编程技术网

Javascript 无法从WebWorker内部访问某些函数和变量

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

我在从我创建的web worker内部的main调用函数时遇到问题。我用Java语言创建了一个类似于enum的对象:

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 */