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
Susan Sarandonoriginal
2024-12-17 18:36:12702parcourir

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

est équivalent à :

async function getVal() {
  const result = await doSomethingAsync();
  return Promise.resolve(result);
}

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

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

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