AsyncFunction

Le constructeur AsyncFunction crée un nouvel objet pour une fonction asynchrone. En JavaScript, chaque fonction asynchrone est en fait un objet AsyncFunction.

Attention, AsyncFunction n'est pas un objet global. On peut l'obtenir gr√Ęce au code suivant :

Object.getPrototypeOf(async function(){}).constructor

Syntaxe

new AsyncFunction ([arg1[, arg2[, ...argN]],] functionBody)

Paramètres

arg1, arg2, ... argN
Les noms des param√®tres pass√©s √† la fonction. Chacun doit √™tre une cha√ģne de caract√®res qui puisse √™tre un identifiant JavaScript valide ou une liste de telles cha√ģnes s√©par√©es par une virgule (ex. "x", "laValeur", ou "a,b").
functionBody
Une cha√ģne de caract√®res qui contient les instructions JavaScript d√©finissant la d√©finition de la fonction.

Description

Les objets des fonctions asynchrones créés avec le constructeur AsyncFunction sont analysés lorsque la fonction est créée. C'est moins efficace que de déclarer une fonction asynchrone avec une expression de fonction asynchrone et de l'appeler depuis le code car ces fonctions sont analysées avec le reste du code.

Tous les arguments passés à la fonction sont traités comme les noms des identifiants des paramètres de la fonction qui sera créée, dans l'ordre dans lequel ils sont passés.

Note : Les fonctions asynchrones cr√©√©es avec le constructeur AsyncFunction ne cr√©ent pas de fermetutres dans leurs contextes de cr√©ation. Elles sont toujours cr√©√©es dans la port√©e globale. Lorsqu'on les ex√©cute, ellee ne pourront acc√©der qu'√† leurs variables locales et aux variables globales, pas √† celles qui appartiennent √† la port√©e dans laquelle AsyncFunction a √©t√© appel√©. On aurait donc un comportement diff√©rent  si on appelait eval avec le code de l'expression de la fonction asynchrone.

Si on appelle AsyncFunction comme une fonction (c'est-à-dire sans new), cela aura le même effet que s'il est appelé comme un constructeur.

Propriétés

AsyncFunction.length
La propriété de longueur du constructeur AsyncFunction dont la valeur est 1.
AsyncFunction.prototype
Le prototype permet d'ajouter des propriétés à tous les objets représentant les fonctions asynchrones.

Prototype de l'objet AsyncFunction

Propriétés

AsyncFunction.constructor
La valeur initiale est AsyncFunction.
AsyncFunction.prototype[@@toStringTag]
Renvoie "AsyncFunction".

Instances AsyncFunction

Les instances d'AsyncFunction héritent des méthodes et des propriétés de AsyncFunction.prototype. Comme avec les autres constructeurs, on peut changer l'objet prototype du constructeur afin de modifier l'ensemble des instances AsyncFunction.

Exemples

Créer une fonction asynchrone avec un constructeur AsyncFunction

function resolveAfter2Seconds(x) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
var a = new AsyncFunction("a",
                          "b",
                          "return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);");
a(10, 20).then(v => {
  console.log(v); // affiche 30 après 4 secondes
});

Spécifications

Sp√©cification √Čtat Commentaires
ECMAScript (ECMA-262)
La définition de 'AsyncFunction object' dans cette spécification.
Standard évolutif Définition initiale dans ES2017.

Compatibilité des navigateurs

BCD tables only load in the browser

Voir aussi