Atomics.waitAsync()
Базовая линия Новая возможность
Эта функция работает на всех последних устройствах и версиях браузеров. Эта функция может не работать на старых устройствах или версиях браузеров. Она доступна во всех браузерах с ноября 2025 года.
Статический метод Atomics.waitAsync() проверяет, содержит ли общее расположение памяти заданное значение, немедленно возвращая объект со свойством value, содержащим строку "not-equal", если расположение памяти не соответствует заданному значению, или "timed-out", если таймаут установлен на ноль. В противном случае метод возвращает объект, где свойство value является Promise, который выполняется либо с "ok" при вызове Atomics.notify(), либо с "timed-out", если время ожидания истекло.
Atomics.waitAsync() и Atomics.notify() используются вместе для обеспечения синхронизации потоков на основе значения в общей памяти. Поток может немедленно продолжить выполнение, если значение синхронизации изменилось, или он может ждать уведомления от другого потока при достижении точки синхронизации.
Этот метод работает только с Int32Array или BigInt64Array, которые просматривают SharedArrayBuffer. Он неблокирующий и, в отличие от Atomics.wait(), может использоваться в основном потоке. Поскольку он не блокирует весь поток, вам по-прежнему следует проявлять осторожность, чтобы не обращаться к общей памяти до разрешения промиса.
Синтаксис
Atomics.waitAsync(typedArray, index, value) Atomics.waitAsync(typedArray, index, value, timeout)
Параметры
-
typedArray Int32ArrayилиBigInt64Array, которые просматриваютSharedArrayBuffer.-
index - Позиция в
typedArray, на которой нужно ждать. -
value - Ожидаемое значение для проверки.
-
timeoutНеобязательно - Время ожидания в миллисекундах.
NaN(и значения, которые преобразуются вNaN, такие какundefined) становитсяInfinity. Отрицательные значения становятся0.
Возвращаемое значение
Object с указанными ниже свойствами:
-
async - Логическое значение, указывающее, является ли свойство
valuePromiseили нет. -
value - Если
asyncравноfalse, это будет строка, являющаяся либо"not-equal", либо"timed-out"(только когда параметрtimeoutравен0). Еслиasyncравноtrue, это будетPromise, который разрешается строковым значением, либо"ok", либо"timed-out". Промис никогда не отклоняется.
Исключения
-
TypeError - Выбрасывается, если
typedArrayне являетсяInt32ArrayилиBigInt64Array, который просматриваетSharedArrayBuffer. -
RangeError - Выбрасывается, если
indexнаходится вне границ вtypedArray.
Примеры
Обратите внимание, что эти примеры нельзя запустить непосредственно из консоли или произвольной веб-страницы, поскольку SharedArrayBuffer не определен, если не выполнены его требования безопасности.
Использование Atomics.waitAsync()
Данные общего Int32Array:
// Create a SharedArrayBuffer with a size in bytes const sab = new SharedArrayBuffer(1024); const int32 = new Int32Array(sab);
Поток чтения спит и ожидает на позиции 0, которая, как ожидается, будет равна 0. result.value будет промисом.
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
В потоке чтения или в другом потоке вызывается расположение памяти 0, и промис может быть разрешен с помощью "ok".
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
Если это не приводит к разрешению в "ok", значение в общем расположении памяти не было ожидаемым (value будет "not-equal" вместо промиса) или время ожидания истекло (промис будет разрешен с помощью "time-out").
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
waitAsync |
90
|
90
|
145 |
75 |
16.4 |
90
|
145 |
64
|
16.4 |
15.0 |
90
|
16.4 |
1.0.0 |
1.4 |
16.0.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics/waitAsync