Spec-Zone.ru › JavaScript

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
Логическое значение, указывающее, является ли свойство value Promise или нет.
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").

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-atomics.waitasync

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
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
87–90Метод Atomics.waitAsync() никогда не истекает. См. ошибку 40742782.
90
87–90Метод Atomics.waitAsync() никогда не истекает. См. ошибку 40742782.
145
75
16.4
90
89–90Метод Atomics.waitAsync() никогда не истекает. См. ошибку 40742782.
145
64
63–64Метод Atomics.waitAsync() никогда не истекает. См. ошибку 40742782.
16.4
15.0
90
89–90Метод Atomics.waitAsync() никогда не истекает. См. ошибку 40742782.
16.4
1.0.0
1.4
16.0.0

См. также

  • Atomics
  • Atomics.wait()
  • Atomics.notify()

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API