Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Atomics : méthode statique waitAsync()

Baseline 2025
Newly available

Depuis ⁨November 2025⁩, cette fonctionnalité fonctionne sur les appareils et les versions de navigateur les plus récents. Elle peut ne pas fonctionner sur les appareils ou navigateurs plus anciens.

La méthode statique waitAsync() de l'objet Atomics vérifie qu'un emplacement de mémoire partagée contient une valeur donnée, retournant immédiatement un objet dont la propriété value contient la chaîne de caractères "not-equal" si l'emplacement de mémoire ne correspond pas à la valeur donnée, ou "timed-out" si le délai d'attente a été fixé à zéro. Sinon, la méthode renvoie un objet dont la propriété value est une Promise qui s'exécute avec "ok" lorsque Atomics.notify() est appelée, ou "timed-out" si le délai d'attente a expiré.

Atomics.waitAsync() et Atomics.notify() sont utilisés ensemble pour permettre la synchronisation des processus basée sur une valeur en mémoire partagée. Un processus peut continuer immédiatement si la valeur de synchronisation a changé, ou attendre la notification d'un autre processus lorsqu'il atteint le point de synchronisation.

Cette méthode ne fonctionne qu'avec un Int32Array ou un BigInt64Array qui observe un SharedArrayBuffer. Elle est non bloquante et, contrairement à Atomics.wait(), peut être utilisée dans le processus principal. Comme elle ne bloque pas le processus entier, il faut veiller à ne pas accéder à la mémoire partagée avant que la promesse ne soit résolue.

Syntaxe

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

Paramètres

typedArray

Un objet Int32Array ou BigInt64Array qui observe un SharedArrayBuffer.

index

La position au sein du tableau typé typedArray à laquelle on souhaite attendre.

value

La valeur attendue à tester.

timeout Facultatif

Le temps d'attente en millisecondes. NaN (et les valeurs qui sont converties en NaN, comme undefined) devient Infinity. Les valeurs négatives deviennent 0.

Valeur de retour

Un objet (Object) avec les propriétés suivantes :

async

Un booléen indiquant si la propriété value est une Promise ou non.

value

Si async est false, ce sera une chaîne de caractères qui est soit "not-equal" soit "timed-out" (uniquement lorsque le paramètre timeout est 0). Si async est true, ce sera une Promise qui est résolue avec une valeur de chaîne, soit "ok" soit "timed-out". La promesse n'est jamais rejetée.

Exceptions

TypeError

Levée si typedArray n'est pas un objet Int32Array ou un BigInt64Array qui observe un SharedArrayBuffer.

RangeError

Levée si index est hors des limites de typedArray.

Exemples

Utilisation de waitAsync()

Soit un tableau de mémoire partagée Int32Array.

js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);

Un processus de lecture est en train de dormir et d'attendre sur l'emplacement 0 qui devrait être 0. Le result.value sera une promesse.

js
const resultat = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }

Dans le processus de lecture ou dans un autre processus, l'emplacement mémoire 0 est appelé et la promesse peut être résolue avec "ok".

js
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }

Si elle ne se résout pas en "ok", la valeur dans la mémoire partagée n'était pas celle attendue (la valeur serait "not-equal" au lieu d'une promesse) ou le délai d'attente a été atteint (la promesse se résoudra en "time-out").

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-atomics.waitasync

Compatibilité des navigateurs

Voir aussi