我有一个如下所示的网络工作者:
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
。
有什么想法吗?
答案 0 :(得分:2)
如果点击处理程序触发两次,则在第二次调用时将未定义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,没有事件处理,没有尝试写入屏幕上的对象等等。只是计算和消息传递。