HTML5消息传递API和使用web workers时的消息顺序

HTML5消息传递API和使用web workers时的消息顺序,html,web-worker,Html,Web Worker,在一个简单的HTML5WebWorker项目中,我定义了一个使用HTML5MessagingAPI交换消息的WebWorker。由于我们已经定义了两个.onmessage处理程序(回调函数),一个在主脚本中,另一个在worker.js中,因此我在这里感到困惑: index.html: <!DOCTYPE html> <html> <body> <script> var worker = new Worker("worker.js"); worker

在一个简单的HTML5WebWorker项目中,我定义了一个使用HTML5MessagingAPI交换消息的WebWorker。由于我们已经定义了两个.onmessage处理程序(回调函数),一个在主脚本中,另一个在worker.js中,因此我在这里感到困惑: index.html:

<!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.postMessage(“message3,”);触发worker.postMessage(“message3,”);在worker.js和postMessage中(“消息0,”+event.data);in returns在主脚本中触发worker.onmessage=函数(事件)!最后是postMessage(“message1”);从worker.js触发主脚本的onmessage(index.html)。我们可以说,对一个worker的任何postMessage调用都会触发其他web worker的onmessage函数吗?

您可能会将web worker实现与js方法混淆,而js方法可能会将对象作为函数传递。HTML5中的WEB工作者正在将线程技术引入JAVASCRIPT

原因似乎在“.onmessage”的append事件中,而您的
worker.js
以发布的表达式“postMessage(“message 0,“+event.data”);”开头。由于这个原因,
消息0
首先出现


像下面这样的一个好的介绍性教程应该可以解决您的问题-。

好的,但是为什么消息的顺序不是1,0,3。当index.html的onmassage事件将被触发,而worker.js的onmessage事件?因为,您附加event
.onmessage
,并且您的worker以posted expression
postMessage(“消息0,+event.data”)开始。由于这个原因,“邮件0”排在第一位。谢谢,我还编辑了我的问题,以便更清楚地说明我的担忧。如果你能对我最后一行问题发表意见,我将不胜感激。事实上,我不知道为什么在很多地方我们都定义了onMessageHandler函数!什么时候会被触发
this.onmessage = function(event) {
    postMessage("message 0,"+event.data);
} 
postMessage("message 1,");