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

Les fonctions asynchrones renvoient-elles toujours des promesses ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 02:09:12812parcourir

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));

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);

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