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 einem gemeinsam genutzten Speicherort und gibt ein Promise
zurück.
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
ansieht.
Syntax
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Parameter
typedArray
-
Ein
Int32Array
oderBigInt64Array
, das einenSharedArrayBuffer
ansieht. index
-
Die Position im
typedArray
, auf die gewartet werden soll. value
-
Der erwartete Wert zum Testen.
timeout
Optional-
Zeit in Millisekunden, die gewartet werden soll.
NaN
(und Werte, die inNaN
konvertiert werden, wieundefined
) wird zuInfinity
. Negative Werte werden zu0
.
Rückgabewert
Ein Object
mit den folgenden Eigenschaften:
async
-
Ein boolescher Wert, 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"
ist (nur wenn dertimeout
-Parameter0
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
-
Ausgelöst, wenn
typedArray
keinInt32Array
oderBigInt64Array
ist, das einenSharedArrayBuffer
ansieht. RangeError
-
Ausgelöst, wenn
index
außerhalb der Grenzen destypedArray
liegt.
Beispiele
Verwendung von waitAsync()
Gegeben ein gemeinsames Int32Array
.
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
Ein lesender Thread schläft und wartet an Position 0, die 0 erwartet. Der 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 sich nicht zu "ok"
auflöst, war der Wert am gemeinsamen Speicherort nicht der erwartete (der value
wäre "not-equal"
anstelle eines Promise) oder das Timeout wurde erreicht (das Promise wird sich zu "time-out"
auflösen).
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-atomics.waitasync |
Browser-Kompatibilität
BCD tables only load in the browser