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!