Atomics.waitAsync()

可用性有限

此功能不是基线功能,因为它在一些最广泛使用的浏览器中无法使用。

Atomics.waitAsync() 静态方法异步等待共享内存位置,并返回一个 Promise

Atomics.wait() 不同,waitAsync是非阻塞的,可以在主线程上使用。

注意:此操作仅适用于查看 SharedArrayBufferInt32ArrayBigInt64Array

语法

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

参数

typedArray

查看 SharedArrayBufferInt32ArrayBigInt64Array

index

typedArray 中等待的位置。

value

要测试的预期值。

timeout 可选

等待时间(以毫秒为单位)。NaN(以及转换为 NaN 的值,例如 undefined)将变为 Infinity。负值将变为 0

返回值

具有以下属性的 Object

async

一个布尔值,指示 value 属性是否为 Promise

value

如果 asyncfalse,它将是一个字符串,该字符串要么是 "not-equal",要么是 "timed-out"(仅当 timeout 参数为 0 时)。如果 asynctrue,它将是一个 Promise,该承诺将使用一个字符串值来完成,该字符串值要么是 "ok",要么是 "timed-out"。该承诺永远不会被拒绝。

异常

TypeError

如果 typedArray 不是查看 SharedArrayBufferInt32ArrayBigInt64Array,则抛出此错误。

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 的浏览器中加载。

另请参阅