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
AsyncFunctiondont 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 Latest Draft (ECMA-262) La définition de 'AsyncFunction object' dans cette spécification. |
Projet | Définition initiale dans ES2017. |
Compatibilité des navigateurs
| Ordinateur | Mobile | Serveur | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AsyncFunction | Chrome Support complet 55 | Edge Support complet 15 | Firefox Support complet 52 | IE Aucun support Non | Opera Support complet 42 | Safari ? | WebView Android Support complet 55 | Chrome Android Support complet 55 | Firefox Android Support complet 52 | Opera Android Support complet 42 | Safari iOS ? | Samsung Internet Android Support complet 6.0 | nodejs
Support complet
7.6.0
|
prototype | Chrome Support complet 55 | Edge Support complet 15 | Firefox Support complet 52 | IE Aucun support Non | Opera Support complet 42 | Safari ? | WebView Android Support complet 55 | Chrome Android Support complet 55 | Firefox Android Support complet 52 | Opera Android Support complet 42 | Safari iOS ? | Samsung Internet Android Support complet 6.0 | nodejs
Support complet
7.6.0
|
Légende
- Support complet
- Support complet
- Aucun support
- Aucun support
- Compatibilité inconnue
- Compatibilité inconnue
- Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
- Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Voir aussi
- Instruction
async function - Expression
async function Function- Instruction
function - Expression
function - Fonctions et portées des fonctions