Maison >interface Web >js tutoriel >Comment puis-je chaîner et partager les résultats de plusieurs requêtes HTTP à l'aide des promesses Bluebird ?
Chaînage et partage des résultats antérieurs avec des promesses
Dans votre code, vous essayez de faire plusieurs requêtes HTTP à l'aide de la bibliothèque de promesses Bluebird et vous devez transmettre les données de réponse d'une requête à la suivante. Pour y parvenir, vous pouvez utiliser plusieurs stratégies pour enchaîner et partager les résultats antérieurs avec des promesses.
1. Chaînage de promesses
Vous pouvez enchaîner des promesses en renvoyant une promesse à partir des gestionnaires .then(). Chaque .then() suivant recevra le résultat de la promesse précédente. Dans votre cas, vous pouvez enchaîner les demandes comme suit :
callhttp("172.16.28.200", payload).then(function(first) { return callhttp("172.16.28.200", first); }).then(function(second) { return callhttp("172.16.28.200", second); });
2. Accumulation des résultats
Vous pouvez également accumuler tous les résultats dans un seul objet. Créez un objet pour stocker les résultats et transmettez-le en argument aux requêtes suivantes :
var results = {}; callhttp("172.16.28.200", payload).then(function(first) { results.first = first; return callhttp("172.16.28.200", first); }).then(function(second) { results.second = second; return callhttp("172.16.28.200", second); }).then(function(third) { results.third = third; });
3. Promesses imbriquées
Si vous avez besoin d'accéder à tous les résultats précédents, vous pouvez imbriquer les promesses. Chaque promesse imbriquée aura accès aux résultats des promesses externes :
callhttp("172.16.28.200", payload).then(function(first) { return callhttp("172.16.28.200", first).then(function(second) { return callhttp("172.16.28.200", second).then(function(third) { // Access all three results here }); }); });
4. Briser la chaîne
Si certaines requêtes peuvent se dérouler indépendamment, vous pouvez briser la chaîne et utiliser Promise.all() pour collecter les résultats lorsqu'elles sont toutes terminées :
var p1 = callhttp("172.16.28.200", payload); var p2 = callhttp("172.16.28.200", payload); var p3 = callhttp("172.16.28.200", payload); Promise.all([p1, p2, p3]).then(function(results) { // All three results are available in the `results` array });
5. Utilisation de async/await (fonctionnalité ES7)
Dans ES7, vous pouvez simplifier le séquençage des opérations asynchrones à l'aide de async/await. Cela vous permet d'utiliser une syntaxe synchrone régulière, et les résultats intermédiaires sont disponibles dans le même scope :
async function myFunction() { const first = await callhttp("172.16.28.200", payload); const second = await callhttp("172.16.28.200", first); const third = await callhttp("172.16.28.200", second); // Access all three results here } myFunction().then(result => {}).catch(error => {});
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!