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 eine freigegebene Speicherstelle einen gegebenen Wert enthält. Sie gibt sofort ein Objekt mit der value-Eigenschaft zurück, das die Zeichenkette "not-equal" enthält, wenn die Speicherstelle nicht mit dem gegebenen Wert übereinstimmt, oder "timed-out", wenn das Timeout auf null gesetzt wurde. Andernfalls gibt die Methode ein Objekt zurück, bei dem die value-Eigenschaft ein Promise ist, das sich erfüllt mit entweder "ok", wenn Atomics.notify() aufgerufen wird, oder "timed-out", wenn das Timeout abläuft.

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

Diese Methode funktioniert nur mit einem Int32Array oder BigInt64Array, das eine SharedArrayBuffer ansieht. Sie ist nicht blockierend und kann, anders als Atomics.wait(), im Hauptthread verwendet werden. Da sie den gesamten Thread nicht blockiert, müssen Sie dennoch vorsichtig sein, den freigegebenen Speicher nicht vor der Erfüllung des Promises zuzugreifen.

Syntax

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

Parameter

typedArray

Ein Int32Array oder BigInt64Array, das eine SharedArrayBuffer ansieht.

index

Die Position im typedArray, auf die gewartet werden soll.

value

Der erwartete Wert, der überprüft werden soll.

timeout Optional

Wartezeit in Millisekunden. NaN (und Werte, die zu NaN konvertiert werden, wie undefined) werden zu Infinity. Negative Werte werden zu 0.

Rückgabewert

Ein Object mit den folgenden Eigenschaften:

async

Ein boolean, der angibt, ob die value-Eigenschaft ein Promise ist oder nicht.

value

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

Ausnahmen

TypeError

Wird ausgelöst, wenn typedArray kein Int32Array oder BigInt64Array ist, das eine SharedArrayBuffer ansieht.

RangeError

Wird ausgelöst, wenn index außerhalb der Grenzen im typedArray liegt.

Beispiele

Verwendung von waitAsync()

Gegeben ein freigegebenes Int32Array.

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

Ein lesender Thread schläft und wartet auf Standort 0, der erwartungsgemäß 0 sein soll. Das result.value wird ein Promise sein.

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" aufgelöst werden.

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

Wenn es nicht zu "ok" aufgelöst wird, war der Wert in der freigegebenen Speicherstelle nicht der erwartete (der value wäre "not-equal" anstelle eines Promises) oder das Timeout wurde erreicht (das Promise wird zu "timed-out" aufgelöst).

Spezifikationen

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

Browser-Kompatibilität

Siehe auch