JavaScript WebWorker不从onClick执行

时间:2014-12-06 20:35:06

标签: javascript onclick web-worker

我有一个如下所示的网络工作者:

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

有什么想法吗?

1 个答案:

答案 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,没有事件处理,没有尝试写入屏幕上的对象等等。只是计算和消息传递。