MessagePort.postMessage
делает именно это.
onmessage = e => handleMessage;
postMessage("","*");
Вы даже можете использовать MessageChannel , если вы хотите менее навязчивое среднее:
const channel = new MessageChannel();
channel.port1.onmessage = handleMessage;
channel.port2.postMessage('');
В настоящее время это единственный API, который ставит в очередь задачу синхронно, все остальные подразумевают хотя бы некоторое параллельное выполнение.
Возможно, однажды у нас будет метод scheduler.postTask
, который даже позволит нам указать какой-то приоритет для наших задач, но это только на будущее ...