2017-09-08 3 views
0

Il existe un article AsyncFunction - JavaScript on MDN. Il montre l'extrait suivant:AsyncFunction n'est pas défini, mais MDN documente son utilisation

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

Pourtant, dans les deux Mozzila Firefox 55 et Google Chrome, ce constructeur ne se définit pas du tout:

enter image description here enter image description here

J'ai découvert que (async function() {}).constructor est vraiment AsyncFunction , mais pourquoi ne puis-je pas le voir dans une portée mondiale?

+2

Hmm ... Vous did'n lire la documentation assez soigneusement, « _Note que AsyncFunction n'est pas un objet global ... _ ". – Teemu

Répondre

4

Comme mentionné dans les documents Mozilla "Notez que AsyncFunction n'est pas un objet global."

Par conséquent, vous ne pouvez pas y accéder en tant que propriété de l'objet window comme les autres constructeurs globaux. Il doit être obtenu en interrogeant une instance d'une fonction async:

De la documentation:

const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor; 
+0

Y a-t-il une raison à cela? –

+2

Il ne mentionne pas pourquoi, mais j'imagine que cela pourrait être d'encourager l'utilisation du mot clé 'async' sur l'instanciation brute, tout en fournissant un accès pour l'utilisation programmatique tel que votre exemple. –

1

La documentation est elle-même confus il est donc pas étonnant que les gens se confondre aussi bien.

docs nous disent MDN que AsyncFunction n'est pas un objet global, et pourtant ils énumèrent dans le mondial des objets référence! Oops!

Cela conduit à un comportement inattendu. Cela fonctionne:

> f1 = function() {}; 
[Function: f1] 
> f1 instanceof Function 
true 

Mais cela ne:

> f2 = async function() {} 
[AsyncFunction: f2] 
> f2 instanceof AsyncFunction 
ReferenceError: AsyncFunction is not defined 

j'ai écrit un module unexposed que vous pouvez utiliser:

Il fonctionne essentiellement comme l'exemple dans la réponse par Patrick mais vous n'avez pas à reme mber le.

Voir aussi cette question pour plus d'informations: