Maison >interface Web >js tutoriel >Quelle est la différence entre « return wait Promise » et « return Promise » en JavaScript asynchrone ?

Quelle est la différence entre « return wait Promise » et « return Promise » en JavaScript asynchrone ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-28 06:20:15545parcourir

What's the Difference Between `return await Promise` and `return Promise` in Asynchronous JavaScript?

Comprendre la distinction entre la promesse d'attente de retour et la promesse de retour

En JavaScript asynchrone, le comportement de la promesse d'attente de retour et de la promesse de retour a souvent été un sujet de débat. Bien que les deux expressions impliquent le retour de promesses, des différences subtiles peuvent survenir dans des scénarios spécifiques.

Fonctions asynchrones

Dans les exemples de code fournis, deux fonctions asynchrones (delay1Second) sont définies. La première fonction utilise return wait pour envelopper le résultat de la promesse de retard dans une autre promesse, tandis que la seconde renvoie simplement la promesse de retard sans l'attendre.

Comportement observable

Dans la plupart des cas, il n’y a pas de différence perceptible entre ces deux constructions. Les deux fonctions delay1Second renvoient des promesses qui se résolvent après 1 seconde. Cependant, comme mentionné dans la question, la version return wait peut consommer un peu plus de mémoire en raison de la création d'un objet de promesse intermédiaire.

Gestion des exceptions

Cependant, un une distinction critique émerge lorsque ces expressions sont utilisées dans des blocs try-catch. Prenons l'exemple suivant :

async function rejectionWithReturnAwait() {
  try {
    return await Promise.reject(new Error());
  } catch (e) {
    return 'Saved!';
  }
}

async function rejectionWithReturn() {
  try {
    return Promise.reject(new Error());
  } catch (e) {
    return 'Saved!';
  }
}

Dans la première fonction (rejectionWithReturnAwait), le retour est enveloppé dans wait. Cela signifie que la fonction attendra que la promesse rejetée soit rejetée, ce qui entraînera la levée d'une exception dans le bloc asynchrone. En conséquence, le gestionnaire catch est atteint, et la fonction renvoie une promesse résolue en 'Saved!'.

À l'inverse, dans la deuxième fonction (rejectionWithReturn), la promesse est directement renvoyée sans être attendue dans l'async fonction. Cela signifie que l'exception ne se produit pas dans le bloc asynchrone et que le gestionnaire catch n'est pas exécuté. Au lieu de cela, l'appelant reçoit simplement la promesse rejetée.

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