我有一个web worker用ajax-requests运行耗时的例程任务。我可以从主线程中终止它们而不是等待它们完成吗?是否有可能终止正在运行的web worker?
这就是我如何产卵和终止它:
$("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;
});
}
});
这是工人代码:
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);
实施不受欢迎的机器人那些有用这取决于你如何产生线程。你需要显示你的代码或者至少给我们更多的信息。 – Liam
我已经问了一些关于网络工作者的问题,并且遇到了很多错误和故障。这个功能看起来不错,但非常原始。我不想在最近的将来再尝试使用它。 – Gherman
值得注意的是它在Opera 12 \ m /中可以正常工作。至少看起来如此。 – Gherman