web-dev-qa-db-fra.com

attendre en dehors de la fonction asynchrone ne génère pas d'erreur dans la console

MDN dit :

N'oubliez pas que le mot clé await n'est valide que dans les fonctions async. Si vous l'utilisez en dehors du corps d'une fonction async, vous obtiendrez un SyntaxError.

Mais ce n'est pas vrai.

Essayez ce code dans la console DevTools, aucune erreur, juste le résultat:

async function a(val) { return val; }
await a(10) // await is not inside async function
10

Quel est le problème avec le code ou les documents?

13
Green

MDN docs a raison et explique comment cela fonctionne en JavaScript.

Ceci est juste une fonctionnalité ajoutée par les DevTools pour vous permettre de tester plus facilement le code asynchrone/attendre. Et ce n'est pas une fonctionnalité JavaScript.

Il semble qu'il soit pris en charge depuis le 11/08/2017 dans DevTools:

https://chromium.googlesource.com/chromium/src.git/+/e8111c396fef38da6654093433b4be93bed01dce

Si vous espionnez le

ConsoleModel.js

à la ligne 129, ils ont pour fonction d'évaluer les expressions marquées comme asynchrones:

async evaluateCommandInConsole
9
quirimmo

Rien n'est mauvais.

Vous avez trouvé un fonctionnalité spéciale de la console DevTools ! Il est là pour le rendre aussi simple que possible pour expérimenter avec le code async-await dans un environnement live. Vous pouvez imaginer que tout code que vous entrez dans la console est automatiquement enveloppé dans une fonction async. En fait, comme une autre réponse l'a souligné, c'est exactement ce qui se passe.

Il est important de noter que même si cela fonctionne dans la console, ce n'est pas une fonctionnalité de JavaScript.

Donc, toutes vos observations sont correctes et attendues! Les documents MDN sont précis, car si vous essayez de charger un script sur une page qui utilise await en dehors d'une fonction async, cela entraînera une erreur. D'un autre côté, la console DevTools est conçue pour que cela fonctionne (exclusivement pour l'ergonomie des développeurs), de sorte que votre code s'exécute sans aucune erreur dans la console.

Ce n'est pas le seul astuce la console DevTools a sa manche . En général, si vous voulez vraiment tester le fonctionnement du code sur une page, il est préférable d'exécuter réellement le script sur la page, pas dans la console.

8
Caleb Miller