在簡單的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,");
一件事,我不明白的是顯示消息的順序! 它首先顯示此: ,然後顯示該
但是,爲什麼?我很困惑這些處理程序是如何以及何時被調用的?首先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,0,3。當index.html的onmassage事件將被觸發並且worker.js的onmessage事件被觸發時? –
,因爲你附加事件'.onmessage',你的工作人員開始使用發佈的表達式'postMessage(「message 0,」+ event.data);'。由於這個原因,「消息0」首先出現。 –
謝謝,我也編輯了我的問題,只是爲了更清楚我的擔憂。如果你能評論我最後一行的問題,我很感激。事實上,我不知道爲什麼在多個地方我們定義了onmessage處理函數!以及哪一個會在什麼時候觸發 –