如果我在 web worker 仍在使用时继续使用 postMessage() 会怎样?

What happens if I keep using postMessage() when a web worker is still in use?

我是网络工作者的新手,但我有一个问题是,考虑到以下情况:

  1. 我生成了一个 web worker 并在 Worker
  2. 中设置了 onmessage 处理程序
  3. 然后我在主线程中使用postMessage()来触发Worker的onmessage
  4. 我立即调用另一个 postMessage,而最后一个 onmessage 任务仍在进行中

那请问工作人员是怎么处理的呢?

消息已保存在队列中。 Workers 有一个消息队列,就像主线程一样,它从事件(例如点击)、setTimeoutpostMessage 启动任务。它是这样工作的:

这同样适用于主线程以及 Node.js 例如。这就是 javascript 的工作原理。

所以对于您的回答 - 您发送给 Worker 的所有消息都将按照您处理它们的顺序进行处理,一条接一条。

这是 jsFiddle as a test that my claim is true。您会看到虽然所有消息都是一次发送的,但它们是按顺序处理的。