MDN dit :
N'oubliez pas que le mot clé
await
n'est valide que dans les fonctionsasync
. Si vous l'utilisez en dehors du corps d'une fonctionasync
, vous obtiendrez unSyntaxError
.
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?
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
à la ligne 129, ils ont pour fonction d'évaluer les expressions marquées comme asynchrones:
async evaluateCommandInConsole
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.