我有一个指定的网络工作者,如下所示:
var w;
function startWorker() {
if(typeof(Worker) !== "undefined") {
if(typeof(w) == "undefined") {
w = new Worker("scripts/gameengine.js");
}
w.onmessage = function(event) {
console.log("Testing web worker");
};
} else {
console.log("No support for web workers");
}
}
function stopWorker() {
w.terminate();
w = undefined;
}
然而;当我从onClick函数运行
startWorker();
时,出现错误:Uncaught TypeError: undefined is not a function on line 117
第117行是
w.terminate()
;在我的stopWorker
中。有任何想法吗?
最佳答案
如果单击处理程序触发两次,则在第二次调用时w
将是未定义的。
出于以下原因,建议进行防御性编程:
代码只应调用定义明确的事物;否则JS往往会阻止后续语句的执行
正确处理后,console.log可用于告诉您正在发生的事情
function stopWorker() {
if ( w && (typeof(w.terminate)==='function') ){
w.terminate();
w = undefined;
console.log('terminated worker per click request');
} else {
console.log('received click request to terminate worker, but worker undefined');
}
}
另外,请注意,上次检查时,工作人员无法访问浏览器功能,只能将消息传递回主脚本。这意味着没有jQuery,没有事件处理,没有试图写入屏幕上的对象等的功能。仅仅是计算和消息传递。