javascript - HTML5 从 Worker 调用全局函数

标签 javascript html web-worker

我在 Utils.js 中有一个名为“sendAndWaitCommand”的全局函数。
当我尝试从 Worker(名称“uploadToDevice.js”)调用此函数时,Worker 崩溃了。

  • 工作线程初始化

    var worker = new Worker('uploadToDevice.js');   
    worker.postMessage(SplitedFile);
    
  • 工作人员 (uploadToDevice.js)

    self.addEventListener('message', function (e)   
    {   
      var SplitedFile = e.data;   
      sendAndWaitCommand(SplitedFile[0].substring(1));//crash here   
    
    }, false);   
    
  • Utils.js

     function sendAndWaitCommand(commandToSend)   
     {   
        ...//Some heavy stuff to do.  
     }  
    

有什么方法可以调用全局函数而不会让工作线程崩溃吗?
如果没有,是否有解决方案如何从工作人员外部调用对象?

最佳答案

JavaScript 模型自然不是基于线程的,而是基于事件的。没有工具可以在多线程上下文中锁定数据并确保其完整性。

这就是为什么多线程方案(其中包括网络 worker )不允许数据共享(“全局”函数是一些数据,通常通过闭包指向数据)。您无法从网络 worker 中调用“全局”函数。 You communicate with messages .

您设置一个事件监听器,而不是全局函数:

var myWorker = new Worker("my_task.js");
myWorker.onmessage = function (oEvent) {
   // the implementation of your "global function", for example :
   sendAndWaitCommand(oEvent.data.commandToSend);
};

关于javascript - HTML5 从 Worker 调用全局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21987096/

相关文章:

javascript - 使用 Web Workers 运行 $interval 等 AngularJS 函数?

javascript - 正则表达式:获取特定子字符串前后的数字

Javascript 多电子邮件正则表达式验证

javascript - javascript中的对象方法和缩短的对象方法语法有什么区别?

html - 表中的换行符

javascript - jQuery 通过选择不同的复选框显示动态 div

html - Bootstrap 列内容图像响应

javascript - 等待异步 ajax 完成后再转向其他代码?

javascript 拦截来自 web worker + 文件 url 的 http 获取

Javascript settimeout 在网络 worker 中不起作用