Gérer les résultats intermédiaires dans les chaînes de promesses
Problème :
Lors de la création de chaînes de promesses, il Il peut être difficile d'accéder aux résultats des promesses intermédiaires lors du rappel final. Dans l'exemple suivant, comment pouvons-nous accéder au résultat de promiseA dans le rappel de promiseB ?
function getExample() { return promiseA(…).then(function(resultA) { // Processing return promiseB(…); }).then(function(resultB) { // How can we access resultA here? }); }
Solution : briser la chaîne
Pour accéder aux résultats intermédiaires dans la chaîne de promesses, il est préférable de diviser la chaîne en composants distincts. Cela vous permet d'attacher plusieurs rappels à la même promesse, en accédant à la valeur résolue en cas de besoin. Voici une version améliorée du code :
function getExample() { var a = promiseA(…); var b = a.then(function(resultA) { // Processing return promiseB(…); }); return Promise.all([a, b]).then(function([resultA, resultB]) { // Processing using both resultA and resultB return …; }); }
Cette approche utilise la méthode Promise.all() pour créer un tableau de toutes les promesses de la chaîne. Nous enchaînons ensuite un autre rappel then() au résultat Promise.all(), en passant une fonction qui reçoit un tableau des valeurs résolues. Cela nous permet d'accéder facilement à resultA et resultB dans le rappel final.
Solutions alternatives :
Dans ES5, vous pouvez utiliser la méthode .spread() pour obtenir fonctionnalité similaire :
… return Promise.all([a, b]).then(.spread(function(resultA, resultB) { … });
Bluebird fournit une méthode join() dédiée qui simplifie ce processus plus loin :
… return Promise.join(a, b, function(resultA, resultB) { … });
En brisant la chaîne et en utilisant les combinateurs de promesses appropriés, vous pouvez accéder et manipuler avec élégance les résultats de promesses intermédiaires, garantissant ainsi une structure de code claire et efficace.
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!