Is it possible to terminate a running web worker?
javascript, web-worker
Solution
You can kill any webworker using `terminate()`.
Citing from MDN:
The Worker.terminate() method immediately terminates the Worker. This does not offer the worker an opportunity to finish its operations; it is simply stopped at once.
Problem
I have a web worker running a time-consuming routine task with ajax-requests. Can I terminate them from a main thread not waiting for them to finish? That's how I spawn and terminate it: ``` $("button.parse-categories").click(function() { if (parseCategoriesActive==false) { parseCategoriesActive = true; parseCategoriesWorker = new Worker("parseCategories.js"); $("button.parse-categories-cancel").click(function() { parseCategoriesWorker.terminate(); parseCategoriesActive = false; }); } }); ``` This is the worker code: ``` function myAjax(url, async, callback) { xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) callback(xmlhttp.responseText); if (xmlhttp.readyState==4 && xmlhttp.status!=200) { self.postMessage("error"); throw "error in ajax: "+xmlhttp.status; } } xmlhttp.open("GET", url, async); xmlhttp.send(); } var parseCategoriesActive = true; var counter = 0; do { myAjax('parser.php', false, function(resp) { if (resp=='success') parseCategoriesActive = false; else { counter += Number(resp); self.postMessage(counter); } }); } while (parseCategoriesActive==true); ```