javascript - 如何处理对同一个 Web Worker 的多个请求

标签 javascript html web-worker

我创建了一个处理大数据的网络 worker 。以下是代码实现:

worker.js

self.addEventListener('message', function(e) {
  console.log('Message received from main script');
  for(var i=0; i<999999999; i++){
    // computation here
  }
  console.log('Posting message back to main script');
  self.postMessage('You said: ' + e.data);
}, false);

主要脚本

var myWorker;
if (window.Worker) {
  if(typeof(w)=="undefined"){
    myWorker = new Worker("scripts/controllers/workers.js");
  }
}
myWorker.addEventListener('message', function(e) {
    console.log('Message received from worker'+ e.data);
}, false);

function callWorker(someData){
  myWorker.postMessage(someData);
}
callWorker(someData);//first time call - by user click
callWorker(someOtherData);//second time call - again user click (don't want to disable button)

在这种情况下,我不想多次执行callWorker。 我想要的是,如果 callWorker 当前正在执行,并且意味着当 callWorker 提出第二个请求时,那么第一个请求应该终止,第二个请求应该处理(最新的请求应该处理) .

我怎样才能实现这个目标?感谢您的帮助

最佳答案

我想,您可以尝试终止工作线程并重新启动它。 当您调用terminate方法时,它将立即终止,而无需等待操作完成。

myWorker.terminate();
myWorker = new Worker('worker.js');

关于javascript - 如何处理对同一个 Web Worker 的多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40946944/

相关文章:

javascript - 将 div 移动到标题顶部

javascript - 在网络 worker 中实现信号量锁定的有效方法是什么?

javascript - 检测postMessage是否可以发送对象?

javascript - 从 CKeditor 窗口实例传递数据

javascript - 测试字符串是否包含字符串数组中的单词

javascript - 为什么这些圆圈会出现在我的 Canvas 上?

angular - new Worker() 只有在传递一个字符串时才会被捆绑

javascript - 放大时谷歌地图和标记聚类器出现奇怪的问题

javascript - VS Code 调试器中的 Jest + Babel 导致断点移动

javascript - 切换页面时白屏闪烁