Among the Atomic operations the Atomics.waitAsync() operator is used to make an operation wait asynchronously on memory and returns a promise. It is non-blocking as compared to Atomics.wait() and can be used on the main thread. If the promise is not fulfilled then it will lead to a ‘time-out’ status otherwise the status will always be ‘ok’ after the promise has been fulfilled.
Syntax:
Atomics.waitAsync(typedArray, ind, val, timeOut)
Parameters: This operation accepts four parameters.
- typedArray: It is an Int32Array or BigInt64Array.
- ind: It is the position of the element to wait on.
- val: It is the expected value.
- timeOut: It is the time for which we have to wait. Infinity is the default value.
Return Value: It returns two values where the first value is boolean and tells if the promise is created. If the first value is true then the second value is a Promise which is fulfilled and never rejected
Example 1: This example shows the use of the waitAsync() method.
Javascript
let example = new SharedArrayBuffer(1024); let arr = new Int32Array(example); console.log(Atomics.waitAsync(arr, 0, 0, 1000)); |
Output:
{ async: true, value: Promise { <pending> } }
Example 2: This example shows the promise fulfilled state.
Javascript
let example = new SharedArrayBuffer(1024); let arr = new Int32Array(example); let res = Atomics.waitAsync(arr, 0, 0, 1000) console.log(res); Atomics.notify(arr, 0) setTimeout(() => { console.log(res); }, 1000); |
Output: The notify() method wakes the array and the promise is fulfilled.
{ async: true, value: Promise { <pending> } } { async: true, value: Promise { 'ok' } }
Supported Browsers:
- Chrome
- Edge
- Opera
- Safari
We have a complete list of Javascript Atomic methods, to check those please go through this JavaScript Atomics Reference article.