相当于标题所说的内容。更奇怪的是,只有当您在新选项卡中运行程序时才会发生这种情况,如果您只是刷新页面,则每个console.log
只会有一条消息。
以下是main.js
:
const worker = new Worker('worker.js');
以下是worker.js
:
console.log('Foo bar!');
以下是index.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Web Workers</title>
<style></style>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
Firefox中没有发生同样的情况。我使用的是Chrome 65版,更奇怪的是重复邮件似乎属于“上下文”下拉列表中没有列出的上下文,所以当我尝试过滤除{{{{{{{ 1}}是第一条消息,第二条消息(副本)似乎属于无上下文。
@ bean的回答显示,已经有一个问题(从2018年2月开始,我相信)尚未得到回答。如果没有人回答这个问题,我会考虑在Chrome的开发论坛中提出一个问题/无论如何。
答案 0 :(得分:7)
这似乎是Chrome中的一种奇怪行为,有人在此处发布了同样的问题 Console.log double logging from web workers
但是,将console.log
直接放在worker.js
内并不是一个好习惯。 Web工作程序在单独的线程中运行并侦听从main.js
发布的消息并相应地执行操作,因此任何业务逻辑都应放在onmessage
事件处理程序中。通过这样做,您不必担心代码被执行两次。