Канал связи между различными агентами очень низкоуровневый, но на этом основании вы можете легко построить коммуникацию более высокого уровня. Я бы использовал объекты для передачи различных «событий»:
{ 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();
Это простодать вам основную идею.