2014-12-06 40 views
0

執行I具有低於指定爲這樣的網絡工作者:的JavaScript WebWorker不從的onClick

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

任何想法?

回答

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,沒有事件處理,沒有試圖寫入屏幕上的對象等只是計算和消息傳遞。

+0

它不應該發生兩次;但我會嘗試這一點。 – Tukajo 2014-12-06 20:49:12

+0

實現您的代碼確實顯示了第二個控制檯日誌;是否有這個可以避免的原因? – Tukajo 2014-12-06 20:50:07

+0

我的onClick基於懸停在我創建的對象上。因此,如果檢測到點擊以及懸停在對象上,則應激活單擊事件。 – Tukajo 2014-12-06 20:50:42