Spec-Zone.ru › Web APIs

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() может отправлять только один объект за раз. Как показано выше, если вы хотите передать несколько значений, отправьте массив.

Спецификации

Спецификация
HTML
# dom-dedicatedworkerglobalscope-postmessage-dev

Совместимость с браузерами

Рабочие столы Мобильные устройства
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API