Atomics.waitAsync()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Die statische Methode Atomics.waitAsync() überprüft, ob ein gemeinsamer Speicherort einen bestimmten Wert enthält. Sie gibt sofort ein Objekt mit der Eigenschaft value zurück, das den String "not-equal" enthält, wenn der Speicherort nicht dem angegebenen Wert entspricht, oder "timed-out", wenn das Timeout auf null gesetzt war. Andernfalls gibt die Methode ein Objekt zurück, bei dem die Eigenschaft value ein Promise ist, das entweder dann mit "ok" erfüllt wird, wenn Atomics.notify() aufgerufen wird, oder mit "timed-out", wenn das Timeout abläuft.

Atomics.waitAsync() und Atomics.notify() werden zusammen verwendet, um die Synchronisierung von Threads basierend auf einem Wert im gemeinsamen Speicher zu ermöglichen. Ein Thread kann sofort fortfahren, wenn sich der Synchronisationswert geändert hat, oder er kann auf eine Benachrichtigung eines anderen Threads warten, wenn dieser den Synchronisationspunkt erreicht.

Diese Methode funktioniert nur mit einem Int32Array oder BigInt64Array, das einen SharedArrayBuffer betrachtet. Sie ist nicht blockierend und kann im Gegensatz zu Atomics.wait() im Hauptthread verwendet werden. Da sie den ganzen Thread nicht blockiert, müssen Sie dennoch darauf achten, nicht auf den gemeinsamen Speicher zuzugreifen, bevor das Promise erfüllt ist.

Syntax

js
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)

Parameter

typedArray

Ein Int32Array oder BigInt64Array, das einen SharedArrayBuffer betrachtet.

index

Die Position im typedArray, auf die gewartet werden soll.

value

Der erwartete Wert, der getestet werden soll.

timeout Optional

Zeit, die in Millisekunden gewartet werden soll. NaN (und Werte, die in NaN umgewandelt werden, wie undefined) wird zu Infinity. Negative Werte werden zu 0.

Rückgabewert

Ein Object mit den folgenden Eigenschaften:

async

Ein boolescher Wert, der angibt, ob die Eigenschaft value ein Promise ist oder nicht.

value

Wenn async false ist, wird es ein String sein, der entweder "not-equal" oder "timed-out" ist (nur wenn der timeout-Parameter 0 ist). Wenn async true ist, wird es ein Promise sein, das mit einem String-Wert erfüllt wird, entweder "ok" oder "timed-out". Das Promise wird niemals abgelehnt.

Ausnahmen

TypeError

Wird ausgelöst, wenn typedArray kein Int32Array oder BigInt64Array ist, das einen SharedArrayBuffer betrachtet.

RangeError

Wird ausgelöst, wenn index außerhalb des Bereichs im typedArray liegt.

Beispiele

Verwendung von waitAsync()

Gegeben ist ein gemeinsames Int32Array.

js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);

Ein lesender Thread schläft und wartet an Position 0, wo ein Wert von 0 erwartet wird. Der result.value ist ein Promise.

js
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }

Im lesenden Thread oder in einem anderen Thread wird der Speicherort 0 aufgerufen und das Promise kann mit "ok" erfüllt werden.

js
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }

Wenn es nicht mit "ok" aufgelöst wird, war der Wert am gemeinsamen Speicherort nicht der erwartete Wert (das value wäre "not-equal" anstelle eines Promise) oder das Timeout wurde erreicht (das Promise wird mit "time-out" aufgelöst).

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-atomics.waitasync

Browser-Kompatibilität

Siehe auch