Comment gérer les résultats dépendants dans les chaînes de promesses
Votre question demande comment utiliser les résultats précédents dans une séquence de requêtes HTTP basées sur des promesses. Pour résoudre ce problème, considérons d'abord diverses stratégies de partage de données entre promesses dépendantes. Le choix de la stratégie dépend de votre besoin d'accéder à tous les résultats antérieurs ou seulement au plus récent.
Alimentation des résultats de manière séquentielle
Dans ce modèle, le résultat de chaque La requête est passée en argument à la suivante. Cependant, accéder aux résultats précédents devient difficile.
Attribuer des résultats à une portée supérieure
Vous pouvez également stocker les résultats dans des variables dans une portée supérieure. Cela permet d'accéder à tous les résultats précédents.
Accumulation des résultats dans un objet
Cette approche consiste à créer un objet pour accumuler des résultats. Chaque requête ajoute son résultat à l'objet, rendant ainsi disponibles toutes les données précédentes.
Chaînes de promesses imbriquées
Les promesses imbriquées préservent l'accès aux résultats précédents. Chaque couche successive fournit une portée où tous les résultats antérieurs sont accessibles.
Briser la chaîne avec Promise.all()
Si certaines requêtes peuvent fonctionner indépendamment, vous pouvez utiliser Promise.all() pour attendre leur achèvement. Cela vous permet d'obtenir leurs résultats de manière asynchrone.
Utilisation d'Async/Await dans ES7
Dans ES7, async/await peut simplifier le séquençage des opérations asynchrones. Les résultats sont disponibles dans la même portée, éliminant ainsi le besoin de plusieurs gestionnaires .then().
Application à votre exemple
Dans votre cas spécifique, où une clé API est transmis entre plusieurs requêtes HTTP, vous pouvez :
var r1, r2, r3; callhttp("172.16.28.200", payload).then(function(result1) { r1 = result1.data; // Extract the API key return callhttp("172.16.28.200", payload); }).then(function(result2) { r2 = result2.data; // r1 contains the API key from the previous request return callhttp("172.16.28.200", payload); }).then(function(result3) { r3 = result3.data; // r1 and r2 contain the API keys from the previous requests });
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!