MessageChannel, MessagePort і MessageEvent забезпечують обмін
повідомленнями в межах одного realm. Цей інтерфейс не створює межі воркера.
MessageChannel і MessagePort
const channel = new MessageChannel();
channel.port2.onmessage = (event) => {
console.log(event.data);
};
channel.port1.postMessage({ hello: "world" });
// handler runs synchronouslyКанал створює два пов’язані порти. MessagePort не можна створити безпосередньо.
postMessage(value, transfer?)надсилає партнерові копію значення.- Повідомлення буферизуються, доки порт-отримувач не запуститься.
- Присвоєння
onmessageзапускає порт. start()спорожнює буферизовані повідомлення.close()роз’єднує пару й відкидає повідомлення в черзі.- Доступні
onmessage,onmessageerrorіonclose.
Поведінка клонування
Примітивні значення, масиви, прості об’єкти, цикли, значення Date, RegExp,
Map, Set і ArrayBuffer копіюються зі збереженням їхніх типів JavaScript і
вмісту. Функції одразу відхиляються з DataCloneError.
MessageEvent
MessageEvent розширює Event і надає data, origin, lastEventId,
source і ports. Застарілий метод initMessageEvent() також доступний.
Обмеження життєвого циклу воркерів описано в розділі node:worker_threads.
Reference
Status: Partial · Not measured
Exports
| Export | Kind | Status | Notes |
|---|---|---|---|
MessageEvent | class | Partial | missing WindowProxy and ServiceWorker as MessageEventSource (non-browser). data, origin, lastEventId, source, ports, initMessageEvent() |
MessageChannel | class | Partial | missing WindowProxy and ServiceWorker as MessageEventSource (non-browser). port1, port2 |
MessagePort | class | Partial | missing WindowProxy and ServiceWorker as MessageEventSource (non-browser). postMessage(), start(), close(), onclose, onmessage, onmessageerror |