网络工作者发布消息处理顺序
web worker postMessage process order
使用以下代码:
文件:
<!DOCTYPE html>
<html>
<head>
<title></title>
<!--<script type="text/javascript" src="worker.js"></script>-->
<script type="text/javascript" src="run.js"></script>
</head>
<body>
<div id='log'></div>
</body>
</html>
运行.js:
window.onload = function(){
var worker = new Worker('worker.js');
var log = document.getElementById('log');
log.innerHTML += "<p>"+"test"+"</p>";
worker.addEventListener('message', function(e) {
//alert(e.data);
log.innerHTML += '<p>' + e.data + '</p>';
}, false);
for(var i=1; i<21;i++){
worker.postMessage(i);
}
};
工人.js
self.addEventListener('message', function(e) {
self.postMessage(e.data);
}, false);
输出与我期望的列表一样 1 到 20,但是如果我在运行中取消注释警报调用.js消息侦听器,它会打印出 20 到 1。这是因为警报导致写入页面的延迟,并且消息处理在堆栈中备份,因此最后一个打开是第一个关闭的吗?还是别的什么。
是的,这是因为"alert()"。它阻止在工作线程侦听器块内进一步执行代码。换句话说,代码:
log.innerHTML += '<p>' + e.data + '</p>';
仅在按下警报框的模态窗口上的"确定"按钮后执行,按顺序按下它们,按此顺序"log.innerHTML"将被更改,因此您按降序按下它们,这就是您得到此结果的原因。如果您不使用警报消息,一切顺利。
我认为这是Firefox中的一个错误。我在 2020 年尝试过的任何浏览器中都没有看到这种行为:它们都从 1 到 20 排序。
相关文章:
- Meteor方法-处理消息时出现内部异常
- 通过 AJAX 检索 Blob 时处理错误消息
- 处理由无法访问的代码创建的来自Webworker的消息
- InnerHTML创建问题,没有't加载顺序正确,可能存在处理问题
- 按随机顺序对元素进行动画处理
- 正在获取丢失的错误处理程序套接字消息,无法读取属性'timerID'使用Node.js和Socket.i
- 如果我向同一个webworker发送多条消息,它会将它们排队并按顺序处理吗
- 如何处理php echo'ajax中的ed消息
- 为什么我的消息没有用这个处理程序发送到Socket.io房间
- 如何处理JSON错误消息
- 如何使用javascript中的间隔以顺序方式处理websocket响应
- 开发模式下 Rails 3.2 的请求处理顺序
- 网络工作者发布消息处理顺序
- HTML5 在父脚本中为 iframe 设置消息处理程序
- 如何将自定义消息处理程序与 Strophe 连接
- 如何确保出站消息的顺序
- Jquery事件处理顺序:首先单击ele:s本身或父级
- Angular, Promises, foreach在textarea,并保持处理顺序
- Javascript回调——为什么它们的处理顺序不同?
- 未调用内容脚本消息处理程序