我在 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/