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

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

07-26 02:31