The Atomics.waitAsync()
static method waits asynchronously on a shared memory location and returns a Promise.
Unlike Atomics.wait, waitAsync
is non-blocking and usable on the main thread.
Note: This operation only works with an Int32Array or BigInt64Array that views a SharedArrayBuffer.
Syntax
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Parameters
typedArray
- : An Int32Array or BigInt64Array that views a SharedArrayBuffer.
index
- : The position in the
typedArray
to wait on.
- : The position in the
value
- : The expected value to test.
timeout
Return value
An Object with the following properties:
async
- : A boolean indicating whether the
value
property is a Promise or not.
- : A boolean indicating whether the
value
- : If
async
isfalse
, it will be a string which is either"not-equal"
or"timed-out"
(only when thetimeout
parameter is0
). Ifasync
istrue
, it will be a Promise which is fulfilled with a string value, either"ok"
or"timed-out"
. The promise is never rejected.
- : If
Exceptions
- TypeError
- : Thrown if
typedArray
is not an Int32Array or BigInt64Array that views a SharedArrayBuffer.
- : Thrown if
- RangeError
- : Thrown if
index
is out of bounds in thetypedArray
.
- : Thrown if
Examples
Using waitAsync()
Given a shared Int32Array
.
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
A reading thread is sleeping and waiting on location 0 which is expected to be 0.
The result.value
will be a promise.
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
In the reading thread or in another thread, the memory location 0 is called and the promise can be resolved with "ok"
.
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
If it isn't resolving to "ok"
, the value in the shared memory location wasn't the expected (the value
would be "not-equal"
instead of a promise) or the timeout was reached (the promise will resolve to "time-out"
).