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
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Paramètres
typedArray-
Un objet
Int32ArrayouBigInt64Arrayqui observe unSharedArrayBuffer. index-
La position au sein du tableau typé
typedArrayà laquelle on souhaite attendre. value-
La valeur attendue à tester.
timeoutFacultatif-
Le temps d'attente en millisecondes.
NaN(et les valeurs qui sont converties enNaN, commeundefined) devientInfinity. Les valeurs négatives deviennent0.
Valeur de retour
Un objet (Object) avec les propriétés suivantes :
async-
Un booléen indiquant si la propriété
valueest unePromiseou non. value-
Si
asyncestfalse, ce sera une chaîne de caractères qui est soit"not-equal"soit"timed-out"(uniquement lorsque le paramètretimeoutest0). Siasyncesttrue, ce sera unePromisequi 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
typedArrayn'est pas un objetInt32Arrayou unBigInt64Arrayqui observe unSharedArrayBuffer. RangeError-
Levée si
indexest hors des limites detypedArray.
Exemples
>Utilisation de waitAsync()
Soit un tableau de mémoire partagée Int32Array.
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.
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".
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
- L'objet
Atomics - La méthode
Atomics.wait() - La méthode
Atomics.notify()