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 sich an einem freigegebenen Speicherort ein bestimmter Wert befindet. Sie gibt sofort ein Objekt mit der Eigenschaft value 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 Eigenschaft value ein Promise ist, das mit entweder "ok" erfüllt wird, wenn Atomics.notify() aufgerufen wird, oder "timed-out", wenn das Timeout abläuft.
Atomics.waitAsync() und Atomics.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 einem Int32Array oder BigInt64Array, das einen 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 darauf achten, nicht auf den freigegebenen Speicher zuzugreifen, bevor das Promise abgeschlossen ist.
Syntax
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Parameter
typedArray-
Ein
Int32ArrayoderBigInt64Array, das einenSharedArrayBufferansieht. index-
Die Position im
typedArray, auf die gewartet wird. value-
Der erwartete Wert, der getestet wird.
timeoutOptional-
Zeit, die in Millisekunden gewartet wird.
NaN(und Werte, die inNaNumgewandelt werden, wieundefined) werden zuInfinity. Negative Werte werden zu0.
Rückgabewert
Ein Object mit den folgenden Eigenschaften:
async-
Ein boolescher Wert, der angibt, ob die Eigenschaft
valueeinPromiseist oder nicht. value-
Wenn
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
TypeError-
Wird ausgelöst, wenn
typedArraykeinInt32ArrayoderBigInt64Arrayist, das einenSharedArrayBufferansieht. RangeError-
Wird ausgelöst, wenn
indexaußerhalb der Grenzen imtypedArrayliegt.
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 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 (der value 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> |
Browser-Kompatibilität
Loading…