我创建了一个处理大数据的网络 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/