Atomics.waitAsync()
Baseline
2025
Newly available
Since November 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Die statische Methode Atomics.waitAsync() überprüft, ob eine gemeinsame Speicherstelle einen bestimmten Wert enthält. Sie gibt sofort ein Objekt mit der value-Eigenschaft zurück, das den String "not-equal" enthält, wenn die Speicherstelle nicht dem angegebenen Wert entspricht, 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 entweder 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 Thread-Synchronisation 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 von einem anderen Thread warten, wenn der Synchronisationspunkt erreicht wird.
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 Haupt-Thread verwendet werden. Da sie den gesamten Thread nicht blockiert, müssen Sie trotzdem darauf achten, den gemeinsamen Speicher nicht zuzugreifen, bevor das Promise abgeschlossen ist.
Syntax
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Parameter
typedArray-
Ein
Int32ArrayoderBigInt64Array, das einenSharedArrayBufferbetrachtet. index-
Die Position im
typedArray, auf der gewartet werden soll. value-
Der erwartete Wert zum Testen.
timeoutOptional-
Zeit, um in Millisekunden zu warten.
NaN(und Werte, die inNaNumgewandelt werden, wieundefined) wird zuInfinity. Negative Werte werden zu0.
Rückgabewert
Ein Object mit den folgenden Eigenschaften:
async-
Ein Boolean, der anzeigt, ob die
value-Eigenschaft einPromiseist oder nicht. value-
Wenn
asyncfalseist, wird es ein String sein, entweder"not-equal"oder"timed-out"(nur wenn dertimeoutParameter0ist). Wennasynctrueist, wird es einPromisesein, das mit einem Stringwert erfüllt wird, entweder"ok"oder"timed-out". Das Promise wird niemals abgelehnt.
Ausnahmen
TypeError-
Wird ausgelöst, wenn
typedArraykeinInt32ArrayoderBigInt64Arrayist, das einenSharedArrayBufferbetrachtet. RangeError-
Wird ausgelöst, wenn
indexaußerhalb der Grenzen imtypedArrayliegt.
Beispiele
Beachten Sie, dass diese Beispiele nicht direkt von der Konsole oder einer beliebigen Webseite aus ausgeführt werden können, da SharedArrayBuffer nicht definiert ist, es sei denn, die Sicherheitsanforderungen werden erfüllt.
Verwendung von Atomics.waitAsync()
Gegeben ein gemeinsames Int32Array:
// Create a SharedArrayBuffer with a size in bytes
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
Ein lesender Thread schläft und wartet auf die Position 0, die erwartet wird, 0 zu sein.
Das result.value wird ein Promise sein.
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
Im lesenden Thread oder in einem anderen Thread wird die Speicherstelle 0 aufgerufen und das Promise kann mit "ok" aufgelöst werden.
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
Wenn es nicht mit "ok" aufgelöst wird, war der Wert an der gemeinsamen Speicherstelle nicht der erwartete (der 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> |