初始化网络工作者

问题描述 投票:0回答:2

似乎从主机到worker的唯一通信是postMessgageonmessage。如果工作程序需要一些动态初始化(如在构造函数中,在这里:稍后要使用的正则表达式),那么执行此操作的最佳方法是什么?

[一种可能是使data为对象,并具有例如action参数,并在每次运行时进行检查。这似乎有点笨拙。

javascript constructor web-worker
2个回答
1
投票

不同代理之间的通信通道是非常低级的,但是您可以基于此轻松建立更高级别的通信。我会使用对象来传达不同的“事件”:

  { event: "init", data: [/d/] }

基于这些事件,您可以创建不同的事件来表示例如函数调用及其响应:

 { event: "call-init", data: [/d/] } // >>>
 { event: "return-init", data: ["done"] } // <<<

然后,您可以围绕它构建一个包装,该包装发送并处理响应,类似于:

    async function call(name, ...args) {
      channel.send("call-" + name, args);
      return await cannel.once("return-" + name);
   }

   channel.init = call.bind(null, "init");

然后您的代码将变成类似以下内容:

  const channel = new Channel(worker);
  await channel.init(/d/);
 await channel.doOtherStuff();

仅是为了提供基本概念。


0
投票

[除Jonas精心设计的解决方案滥用之外的另一种方法the Worker's name option:您可以例如用此名称传递正则表达式字符串,并在以后使用:

test.js

Worker

worker.js

name
© www.soinside.com 2019 - 2024. All rights reserved.