Maison > interface Web > js tutoriel > Les fonctions asynchrones renvoient-elles toujours des promesses ?

Les fonctions asynchrones renvoient-elles toujours des promesses ?

Mary-Kate Olsen
Libérer: 2024-12-25 02:09:12
original
912 Les gens l'ont consulté

Do Async Functions Always Return Promises?

Question : les fonctions asynchrones renvoient-elles implicitement des promesses ?

En JavaScript, les fonctions asynchrones sont déclarées à l'aide du mot-clé async et sont souvent considérées comme automatiquement promesses de retour. Cependant, cela soulève une incohérence potentielle : lorsqu'une valeur non promise est explicitement renvoyée, la fonction semble envelopper la valeur dans une promesse.

Réponse : toutes les fonctions asynchrones renvoient des promesses

Le comportement observé est correct : toutes les fonctions asynchrones renvoient implicitement des promesses. Plus précisément :

  • Lorsqu'une fonction asynchrone renvoie sans instruction de retour explicite, elle renvoie une promesse résolue en non défini.
  • Lorsqu'une fonction asynchrone renvoie explicitement une valeur non promise, elle enveloppe la valeur d'une promesse résolue à cette valeur.
  • Même lorsqu'une fonction asynchrone contient une expression d'attente, la valeur renvoyée est toujours une promesse, enveloppant le résultat de l'attente expression.
  • Si une erreur est générée dans une fonction asynchrone, la promesse renvoyée est rejetée avec cette erreur.

Exemple :

async function increment(num) {
  return num + 1;
}

// Logs 4, as the returned promise resolves to 4.
increment(3).then(num => console.log(num));
Copier après la connexion

Comportement d'emballage :

Ce comportement d'emballage est unique aux fonctions du générateur. Par exemple, les fonctions génératrices renvoient également des promesses, mais d'une manière différente :

function* foo() {
  return 'test';
}

// Logs an object, not "test".
console.log(foo());

// Logs 'test' by explicitly calling .next() on the generator function.
console.log(foo().next().value);
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal