Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Atomics.waitAsync()
Baseline 2025Newly 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 MethodeAtomics.waitAsync() überprüft, ob sich an einem freigegebenen Speicherort ein bestimmter Wert befindet. Sie gibt sofort ein Objekt mit der Eigenschaftvalue zurück, das den String"not-equal" enthält, wenn der Speicherort nicht mit dem angegebenen Wert übereinstimmt, oder"timed-out", wenn das Timeout auf null gesetzt wurde. Andernfalls gibt die Methode ein Objekt zurück, bei dem die Eigenschaftvalue einPromise ist, das mit entweder"ok" erfüllt wird, wennAtomics.notify() aufgerufen wird, oder"timed-out", wenn das Timeout abläuft.
Atomics.waitAsync() undAtomics.notify() werden zusammen verwendet, um Threads auf Grundlage eines Werts im freigegebenen Speicher zu synchronisieren. Ein Thread kann sofort fortfahren, wenn sich der Synchronisationswert geändert hat, oder auf eine Benachrichtigung eines anderen Threads warten, wenn er den Synchronisationspunkt erreicht.
Diese Methode funktioniert nur mit einemInt32Array oderBigInt64Array, das einenSharedArrayBuffer ansieht. Sie ist nicht blockierend und kann, anders alsAtomics.wait(), im Hauptthread verwendet werden. Da sie den gesamten Thread nicht blockiert, müssen Sie dennoch darauf achten, nicht auf den freigegebenen Speicher zuzugreifen, bevor das Promise abgeschlossen ist.
In diesem Artikel
Syntax
Atomics.waitAsync(typedArray, index, value)Atomics.waitAsync(typedArray, index, value, timeout)Parameter
typedArrayEin
Int32ArrayoderBigInt64Array, das einenSharedArrayBufferansieht.indexDie Position im
typedArray, auf die gewartet wird.valueDer erwartete Wert, der getestet wird.
timeoutOptionalZeit, die in Millisekunden gewartet wird.
NaN(und Werte, die inNaNumgewandelt werden, wieundefined) werden zuInfinity. Negative Werte werden zu0.
Rückgabewert
EinObject mit den folgenden Eigenschaften:
asyncEin boolescher Wert, der angibt, ob die Eigenschaft
valueeinPromiseist oder nicht.valueWenn
asyncfalseist, wird es ein String sein, entweder"not-equal"oder"timed-out"(nur wenn dertimeout-Parameter0ist). Wennasynctrueist, wird es einPromisesein, das mit einem String-Wert erfüllt wird, entweder"ok"oder"timed-out". Das Promise wird niemals abgelehnt.
Ausnahmen
TypeErrorWird ausgelöst, wenn
typedArraykeinInt32ArrayoderBigInt64Arrayist, das einenSharedArrayBufferansieht.RangeErrorWird ausgelöst, wenn
indexaußerhalb der Grenzen imtypedArrayliegt.
Beispiele
>Verwendung von waitAsync()
Gegeben ein freigegebenesInt32Array.
const sab = new SharedArrayBuffer(1024);const int32 = new Int32Array(sab);Ein lesender Thread schläft und wartet auf die Position 0, die 0 sein soll.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 der Speicherort 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 im freigegebenen Speicherort nicht der erwartete (dervalue wäre"not-equal" anstelle eines Promises) oder das Timeout wurde erreicht (das Promise wird zu"time-out" aufgelöst).
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-atomics.waitasync> |