Maison >interface Web >js tutoriel >Pourquoi « console.log » apparaît-il avant les résultats de la fonction asynchrone dans le code « async » de niveau supérieur ?

Pourquoi « console.log » apparaît-il avant les résultats de la fonction asynchrone dans le code « async » de niveau supérieur ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-17 18:45:18709parcourir

Why Does `console.log` Appear Before Async Function Results in Top-Level `async` Code?

Pourquoi une exécution asynchrone se produit-elle après un message de journal dans une fonction asynchrone de niveau supérieur ?

Dans async/await, il est supposé que les fonctions asynchrones renverront des promesses. Cependant, lorsqu'une fonction asynchrone est utilisée au niveau supérieur sans gestion explicite de la promesse, des complexités surviennent.

Comprendre pourquoi cela ne fonctionne pas

Le problème ici est que la fonction principale renvoie une promesse , laissant l'instruction console.log('outside: ' text) bloquée sans valeur à afficher immédiatement. La syntaxe async/await provoque la journalisation du message « intérieur » après le message « extérieur » car elle attend que la promesse renvoyée par main() soit réglée avant de continuer.

Résoudre le problème

Pour utiliser la valeur renvoyée sans gestion explicite de then(), vous disposez de trois options :

1. Attente de niveau supérieur dans les modules

(Disponible dans les environnements modernes avec prise en charge ES2022)

const text = await main();
console.log(text);

2. Fonction asynchrone de haut niveau qui ne rejette jamais

(async () => {
try {
const text = await main();
console.log(text);
} catch (e) {
// Handle Promise rejection or async exceptions here
}
})();

3. puis et attrape

main()
.then(text => {
console.log(text);
})
.catch(err => {
// Handle Promise rejection or async exceptions here
});

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn