DedicatedWorkerGlobalScope: postMessage() Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Hinweis: Dieses Feature ist nur verfügbar in Dedicated Web Workers.

Die postMessage() Methode der DedicatedWorkerGlobalScope-Schnittstelle sendet eine Nachricht an den Haupt-Thread, der sie erstellt hat.

Diese akzeptiert einen Datenparameter, der Daten enthält, die vom Worker an den Haupt-Thread kopiert werden sollen. Die Daten können jeden Wert oder JavaScript-Objekt enthalten, das vom structured clone-Algorithmus verarbeitet werden kann, einschließlich zyklischer Referenzen.

Die Methode akzeptiert außerdem ein optionales Array von übertragbaren Objekten, die an den Haupt-Thread übertragen werden sollen; Anders als beim Datenparameter können übertragene Objekte im Worker-Thread nicht mehr verwendet werden. (Wenn möglich, werden Objekte mit einer leistungsstarken Zero-Copy-Operation übertragen).

Der Hauptscope, der den Worker erstellt hat, kann über die Worker.postMessage-Methode Informationen an den Thread zurücksenden, der ihn erstellt hat.

Syntax

js
postMessage(message)
postMessage(message, transfer)
postMessage(message, options)

Parameter

message

Das Objekt, das an den Haupt-Thread übermittelt werden soll; dies wird im Datenfeld des Ereignisses geliefert, das an das message-Ereignis gesendet wird. Dies kann jeden Wert oder JavaScript-Objekt enthalten, das vom structured clone-Algorithmus verarbeitet werden kann, einschließlich zyklischer Referenzen.

transfer Optional

Ein optionales Array von übertragbaren Objekten, deren Besitz übertragen werden soll. Der Besitz dieser Objekte wird der Empfängerseite gegeben und sie sind auf der sendenden Seite nicht mehr verwendbar. Diese übertragbaren Objekte sollten an die Nachricht angehängt werden; andernfalls würden sie verschoben, aber tatsächlich nicht auf der Empfangsseite zugänglich sein.

options Optional

Ein optionales Objekt, das die folgenden Eigenschaften enthält:

transfer Optional

Hat die gleiche Bedeutung wie der transfer Parameter.

Rückgabewert

Keiner (undefined).

Beispiele

Der folgende Codeausschnitt zeigt worker.js, in dem ein onmessage-Handler verwendet wird, um Nachrichten vom Hauptskript zu verarbeiten. Innerhalb des Handlers wird eine Berechnung durchgeführt, aus der eine Ergebnisnachricht erstellt wird; diese wird dann mit postMessage(workerResult); an den Haupt-Thread zurückgesendet.

js
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);
};

Im Hauptskript müsste onmessage auf einem Worker Objekt aufgerufen werden, während Sie im Worker-Skript nur onmessage benötigen, da der Worker effektiv der globale Scope ist (DedicatedWorkerGlobalScope).

Für ein vollständiges Beispiel sehen Sie unser Grundlegendes Beispiel für einen dedizierten Worker (dedizierten Worker ausführen).

Note: postMessage() kann nur ein einzelnes Objekt auf einmal senden. Wie oben gezeigt, können Sie, wenn Sie mehrere Werte übergeben möchten, ein Array senden.

Spezifikationen

Specification
HTML Standard
# dom-dedicatedworkerglobalscope-postmessage-dev

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch

Die DedicatedWorkerGlobalScope-Schnittstelle, zu der sie gehört.