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
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Parameter
typedArray
-
Ein
Int32Array
oderBigInt64Array
, das eineSharedArrayBuffer
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 zuNaN
konvertiert werden, wieundefined
) werden zuInfinity
. Negative Werte werden zu0
.
Rückgabewert
Ein Object
mit den folgenden Eigenschaften:
async
-
Ein boolean, der angibt, ob die
value
-Eigenschaft einPromise
ist oder nicht. value
-
Wenn
async
false
ist, wird es ein Zeichenfolg sein, entweder"not-equal"
oder"timed-out"
(nur wenn dertimeout
-Parameter0
ist). Wennasync
true
ist, wird es einPromise
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
keinInt32Array
oderBigInt64Array
ist, das eineSharedArrayBuffer
ansieht. RangeError
-
Wird ausgelöst, wenn
index
außerhalb der Grenzen imtypedArray
liegt.
Beispiele
Verwendung von waitAsync()
Gegeben ein freigegebenes Int32Array
.
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.
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 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 |