Atomics.waitAsync()
Atomics.waitAsync()
静态方法异步等待共享内存位置,并返回一个 Promise
。
与 Atomics.wait()
不同,waitAsync
是非阻塞的,可以在主线程上使用。
注意:此操作仅适用于查看 SharedArrayBuffer
的 Int32Array
或 BigInt64Array
。
语法
js
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
参数
typedArray
-
查看
SharedArrayBuffer
的Int32Array
或BigInt64Array
。 index
-
在
typedArray
中等待的位置。 value
-
要测试的预期值。
timeout
可选-
等待时间(以毫秒为单位)。
NaN
(以及转换为NaN
的值,例如undefined
)将变为Infinity
。负值将变为0
。
返回值
异常
TypeError
-
如果
typedArray
不是查看SharedArrayBuffer
的Int32Array
或BigInt64Array
,则抛出此错误。 RangeError
-
如果
index
超出typedArray
的范围,则抛出此错误。
示例
使用 waitAsync()
给定一个共享的 Int32Array
。
js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
一个读取线程正在休眠,并等待位置 0,该位置预期为 0。result.value
将是一个承诺。
js
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
在读取线程中或在另一个线程中,内存位置 0 被调用,并且该承诺可以使用 "ok"
来解决。
js
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
如果它没有解决为 "ok"
,则共享内存位置中的值不是预期值(value
将是 "not-equal"
而不是承诺),或者超时已到达(该承诺将解决为 "time-out"
)。
规范
规范 |
---|
ECMAScript 语言规范 # sec-atomics.waitasync |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。