2013-01-11 69 views
2

在簡單的HTML5 Web Worker項目中,我定義了一個使用HTML5消息API交換消息的Web Worker。有困惑我的一個源在這裏,由於我們已經定義了兩個.onmessage處理程序(回調函數),一個在主腳本,並在worker.js另外一個事實: 的index.html:HTML5消息API和使用Web工作人員時的消息順序

<!DOCTYPE html> 
<html> 
<body> 
<script> 
var worker = new Worker("worker.js"); 
worker.onmessage = function(event) { 
    alert("Reply from index.html:"+event.data); 
} 
worker.postMessage("message 3,"); 
</script> 
</body> 
</html> 

worker.js:

this.onmessage = function(event) { 
    postMessage("message 0,"+event.data); 
} 
postMessage("message 1,"); 

一件事,我不明白的是顯示消息的順序! 它首先顯示此: enter image description here ,然後顯示該 enter image description here

但是,爲什麼?我很困惑這些處理程序是如何以及何時被調用的?首先worker.postMessage(「message 3,」);觸發worker.postMessage(「message 3,」);在worker.js和postMessage中(「message 0,」+ event.data); in return觸發主腳本中的worker.onmessage = function(event)!然後在最後postMessage(「message 1,」);從worker.js觸發主腳本的onmessage(index.html)。我們可以說我們對工作人員的任何postMessage調用都會觸發其他web工作人員的onmessage功能嗎?

回答

1

您可能會將Web Worker實現與js方法混淆,您可能會將這些對象作爲函數傳遞。 HTML5中的網絡工作者正在將THREADING帶到JAVASCRIPT。

原因似乎是在'.onmessage'的追加事件中,並且您的worker.js從發佈的表達式'postMessage(「message 0,」+ event.data)開始;' 。由於這個原因,message 0首先出現。

像下面這樣的一個很好的入門教程應該解決您的問題 - THE BASICS OF WEB WORKERS

+0

好的,但爲什麼消息的順序不是像1,0,3。當index.html的onmassage事件將被觸發並且worker.js的onmessage事件被觸發時? –

+0

,因爲你附加事件'.onmessage',你的工作人員開始使用發佈的表達式'postMessage(「message 0,」+ event.data);'。由於這個原因,「消息0」首先出現。 –

+0

謝謝,我也編輯了我的問題,只是爲了更清楚我的擔憂。如果你能評論我最後一行的問題,我很感激。事實上,我不知道爲什麼在多個地方我們定義了onmessage處理函數!以及哪一個會在什麼時候觸發 –