Obter dados de forma síncrona do WebWorker?

Embora eu entenda que o JavaScript é inerentemente de thread único e geralmente desaprova essas coisas, estou me perguntando se existe alguma maneira de fazer com que um WebWorker espere até que alguns dados sejam disponibilizados no thread principal sem destruir a pilha de chamadas do WebWorker.

Como se trata de um projeto divertido, posso usar novas tecnologias e coisas que não serão executadas de maneira confiável em navegadores mais antigos, e não me importo com hackers esotéricos, desde que funcionem.

Algumas outras soluções que eu pensei:

Pesquise continuamente o LocalStorage em um loop até que haja dados em uma chave predeterminada. Isso parece funcionar porque as atualizações do LocalStorage por outros threads devem estar visíveis para o thread atual, mesmo quando pesquisadas em um loop, a julgar por todas asdiscussões sobre a segurança do thread do LocalStorage e ter várias guias gravadas na mesma chave LocalStorage. A desvantagem dessa abordagem é que ela não está realmente "esperando", ou seja, o encadeamento de trabalho ainda consome o uso completo da CPU no LocalStorage. Enquanto o LocalStorage geralmente é implementado com bloqueios, não é possível manter um bloqueio LocalStorage por longos períodos de tempo (o bloqueio é liberado uma vezgetItem ousetItem retorna).

ECMAScript 6yield. Isso não funciona aqui porque exige que todas as funções na pilha de chamadas (até o local em que você deseja ceder) sejam marcadas como funções de gerador. O local em que desejo pausar meu WebWorker tem uma pilha de chamadas que contém funções WebAssembly, que não podem ser marcadas como funções de gerador.

IndexedDB. Isso não funciona porque o IndexedDB não suporta solicitações síncronas.

Estou cienteesta pergunta semelhante, mas essa pergunta fala especificamente sobre oonmessage evento e foi solicitado em 2012, antesyield e WebAssembly foram introduzidos.

Existe alguma maneira de simular de alguma forma um bloqueio no thread do WebWorker ou de outra forma, para que ele espere até que alguns dados estejam disponíveis?

questionAnswers(1)

yourAnswerToTheQuestion