The static Atomics.waitAsync() 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 a shared Int32Array or BigInt64Array.


Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)



A shared Int32Array or BigInt64Array.


The position in the typedArray to wait on.


The expected value to test.

timeout Optional

Time to wait in milliseconds. Infinity, if no time is provided.

Return value

A Promise that resolves to one of the following result objects:

{ async: false, value: 'ok' }
{ async: false, value: 'not-equal' } 
{ async: false, value: 'timed-out' }
{ async: true, value: promise }


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 promise is returned immediately.

const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: promise }

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: false, value: "ok" }

If it isn't resolving to "ok", the value in the shared memory location wasn't the expected (the promise will resolve to "not-equal") or the timeout was reached (the promise will resolve to "time-out").


# atomics.waitasync

Browser compatibility

BCD tables only load in the browser

See also