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 ?

Comment puis-je chaîner et partager les résultats de plusieurs requêtes HTTP à l'aide des promesses Bluebird ?

DDD
DDDoriginal
2024-12-06 13:13:12286parcourir

How Can I Chain and Share Results from Multiple HTTP Requests Using Bluebird Promises?

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!

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