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
Libérer: 2024-12-06 13:13:12
original
291 Les gens l'ont consulté

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);
});
Copier après la connexion

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;
});
Copier après la connexion

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
    });
  });
});
Copier après la connexion

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
});
Copier après la connexion

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 => {});
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal