Maison > interface Web > js tutoriel > Fonctions asynchrones en JavaScript : promesse implicite ou valeur de retour explicite ?

Fonctions asynchrones en JavaScript : promesse implicite ou valeur de retour explicite ?

Susan Sarandon
Libérer: 2024-12-17 18:36:12
original
701 Les gens l'ont consulté

Async Functions in JavaScript: Implicit Promise or Explicit Return Value?

Fonctions asynchrones : retour de promesse implicite ou contrôle explicite ?

Les fonctions asynchrones en JavaScript, désignées par le mot-clé async, sont souvent considérées comme implicites promesses de retour. Cependant, un examen plus approfondi révèle que la réalité est plus nuancée.

Par défaut, une fonction asynchrone retournera en effet une promesse si une promesse n'est pas explicitement renvoyée. Cela signifie que le code suivant :

async function getVal() {
  const result = await doSomethingAsync();
  return result;
}
Copier après la connexion

est équivalent à :

async function getVal() {
  const result = await doSomethingAsync();
  return Promise.resolve(result);
}
Copier après la connexion

Cependant, si vous renvoyez explicitement une valeur non promise, la fonction l'enveloppera automatiquement dans une promesse . Par exemple, dans l'exemple suivant :

async function getVal() {
  return doSomethingNonAsync();
}
Copier après la connexion

getVal renverra en fait un objet Promise contenant le résultat de doSomethingNonAsync().

Il convient de noter que ce comportement diffère des fonctions JavaScript traditionnelles. Lorsque vous renvoyez explicitement une valeur primitive à partir d’une fonction régulière, elle est immédiatement renvoyée. Cependant, les fonctions asynchrones renvoient toujours une promesse, en enveloppant les valeurs non promises si nécessaire.

Cela peut sembler incohérent, mais cela correspond au concept de générateurs dans ES6. Les générateurs sont des fonctions qui ne renvoient pas la même valeur que leur instruction return. Au lieu de cela, ils génèrent une série de valeurs, qui peuvent être itérées à l'aide de l'opérateur de rendement.

Par exemple :

function* getVal() {
  yield doSomethingAsync();
  return 'finished';
}

// Logs an object.
console.log(getVal());

// Logs 'yikes' and then 'finished'.
for (const val of getVal()) {
  console.log(val);
}
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!

source:php.cn
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