Atomics.waitAsync()

La méthode statique Atomics.waitAsync() permet d'attendre de façon asynchrone à un emplacement de mémoire partagée et renvoie une promesse.

À la différence de Atomics.wait(), waitAsync() n'est pas bloquante et peut être utilisée sur le fil d'exécution principal.

Note : Cette opération ne fonctionne qu'avec un tableau typé partagé entier Int32Array ou BigInt64Array.

Syntaxe

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

Paramètres

typedArray

Un tableau typé partagé de type Int32Array ou BigInt64Array.

index

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

value

La valeur attendue à tester.

timeout Facultatif

Le temps à attendre, exprimé en millisecondes. Par défaut, c'est la valeur Infinity qui est utilisée.

Valeur de retour

Un objet Promise dont la valeur de résolution est l'un des objets suivants :

js
{ async: false, value: 'ok' }
{ async: false, value: 'not-equal' }
{ async: false, value: 'timed-out' }
{ async: true, value: promise }

Exemples

Utiliser waitAsync()

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

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

Un thread de lecture est en sommeil et attend la valeur 0 à l'emplacement 0. La promesse resultat est renvoyée immédiatement.

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

Dans le thread de lecture ou dans un autre thread, on fait appel à l'emplacement mémoire 0 et la promesse peut être résolue avec value: "ok".

js
Atomics.notify(int32, 0);
// { async: false, value: "ok" }

Si la résolution ne founit pas value: "ok", cela signifie que :

  • La valeur située à cet emplacement de la mémoire partagée n'était pas la valeur attendue ("not-equal")
  • Ou que la durée d'attente a expiré ("time-out").

Spécifications

Specification
ECMAScript Language Specification
# sec-atomics.waitasync

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi