Atomics.waitAsync()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die Atomics.waitAsync()
statische Methode wartet asynchron auf einen gemeinsamen Speicherort und gibt ein Objekt zurück, das das Ergebnis der Operation darstellt.
Im Gegensatz zu Atomics.wait()
ist waitAsync
nicht blockierend und kann im Hauptthread verwendet werden.
Hinweis:
Diese Operation funktioniert nur mit einem Int32Array
oder BigInt64Array
, das einen SharedArrayBuffer
betrachtet.
Syntax
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Parameter
typedArray
-
Ein
Int32Array
oderBigInt64Array
, das einenSharedArrayBuffer
betrachtet. index
-
Die Position im
typedArray
, auf die gewartet wird. value
-
Der erwartete Wert zum Testen.
timeout
Optional-
Wartezeit in Millisekunden.
NaN
(und Werte, die inNaN
umgewandelt werden, wie z.B.undefined
) wird 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 String sein, der entweder"not-equal"
oder"timed-out"
(nur wenn dertimeout
-Parameter0
ist) ist. Wennasync
true
ist, wird es einPromise
sein, das mit einem String-Wert erfüllt wird, entweder"ok"
oder"timed-out"
. Das Versprechen wird niemals abgelehnt.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn
typedArray
keinInt32Array
oderBigInt64Array
ist, das einenSharedArrayBuffer
betrachtet. RangeError
-
Wird ausgelöst, wenn
index
außerhalb der Grenzen imtypedArray
liegt.
Beispiele
Verwendung von waitAsync()
Gegeben ist ein gemeinsames Int32Array
.
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
Ein Lesethread schläft und wartet auf Ort 0, der erwartet wird 0 zu sein. Der result.value
wird ein Versprechen sein.
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
Im Lesethread oder in einem anderen Thread wird der Speicherort 0 aufgerufen und das Versprechen 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 gemeinsamen Speicherort nicht der erwartete (der value
wäre "not-equal"
anstelle eines Versprechens) oder das Timeout wurde erreicht (das Versprechen wird mit "time-out"
aufgelöst).
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-atomics.waitasync |
Browser-Kompatibilität
BCD tables only load in the browser