DedicatedWorkerGlobalScope: метод postMessage()
Базовая реализация Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Примечание: Эта функция доступна только в посвящённых веб-воркерах.
Метод postMessage() интерфейса DedicatedWorkerGlobalScope отправляет сообщение в основной поток, который его запустил.
Он принимает параметр data, содержащий данные, которые нужно скопировать из рабочего потока в основной поток. Данные могут быть любым значением или JavaScript-объектом, обрабатываемым алгоритмом структурированного клонирования, включая циклические ссылки.
Метод также принимает необязательный массив передаваемых объектов для передачи в основной поток; в отличие от параметра data, передаваемые объекты больше недоступны в рабочем потоке. (Когда это возможно, объекты передаются с помощью высокопроизводительной операции нулевой копии).
Основной поток, запустивший рабочий поток, может отправить обратно информацию в поток, который его запустил, используя метод Worker.postMessage.
Синтаксис
postMessage(message) postMessage(message, transfer) postMessage(message, options)
Параметры
message-
Объект, который нужно передать в основной поток; он будет в поле data в событии, доставленном событию
message. Это может быть любое значение или JavaScript-объект, обрабатываемый алгоритмом структурированного клонирования, включая циклические ссылки. transferНеобязательно-
Необязательный массив массив передаваемых объектов для передачи владения. Владение этими объектами передается стороне назначения, и они больше недоступны со стороны отправки. Эти передаваемые объекты должны быть прикреплены к сообщению; в противном случае они будут перемещены, но фактически недоступны на стороне получателя.
optionsНеобязательно-
Необязательный объект, содержащий следующие свойства:
transferНеобязательно-
Имеет то же значение, что и параметр
transfer.
Возвращаемое значение
Ничего (undefined).
Примеры
Следующий фрагмент кода демонстрирует worker.js, в котором обработчик onmessage используется для обработки сообщений из основного сценария. Внутри обработчика выполняется вычисление, на основе которого создается сообщение-результат; затем оно отправляется обратно в основной поток с помощью postMessage(workerResult);
onmessage = (e) => {
console.log("Message received from main script");
const workerResult = `Result: ${e.data[0] * e.data[1]}`;
console.log("Posting message back to main script");
postMessage(workerResult);
};
В основном сценарии onmessage необходимо вызвать на Worker object, в то время как внутри рабочего сценария достаточно onmessage потому что рабочий поток фактически является глобальной областью (DedicatedWorkerGlobalScope).
Для получения полного примера обратитесь к нашему примеру простого рабочего потока (запуск рабочего потока).
Примечание: postMessage() может отправлять только один объект за раз. Как показано выше, если вы хотите передать несколько значений, отправьте массив.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari в iOS | Samsung Internet | WebView Android | |
postMessage |
4 | 12 | 3.5 | 10.6 | 4 | 18 | 4 | 11 | 5 | 1.0 | 4.4 |
См. также
Интерфейс DedicatedWorkerGlobalScope, к которому он относится.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/DedicatedWorkerGlobalScope/postMessage