Je gère plusieurs appels imbriqués à l'aide de JQuery's p> $. Fonction différée code>. Actuellement, le code ne fonctionne pas correctement. Je veux déclencher une fonction lorsque toutes les demandes sont terminées. Mais actuellement après deux demandes, il atteint la console.log code>. <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
3 Réponses :
Une seule promesse peut être résolue ou rejetée une seule fois. Vous devez retourner différentes promesses d'avoir toutes les promesses résolues. Quelque chose comme ceci: Un meilleur moyen de le faire serait d'utiliser des observables (exemple: rxjs) p> Vous pouvez également faire appel à cette réponse pour comprendre la difference entre les pomises et observables: https://stackoverflow.com/a/37365955/6080889 p> p>
Malheureusement, je ne suis pas croire i> l'extrait ci-dessus va fonctionner. Parce qu'un Single i> différé est utilisé pour les deux itérations via la boucle ( DFD code>), les deux promesses dans le tableau code> AllPromises code> n'atteint jamais un "résolu" Etat et donc le promess.all code> ne résoudra pas. Je pourrais avoir tort, mais j'ai essayé de le tirer dans un extrait avec des fonctions asynchrones simulées modifiées et qui semblait être le cas.
@Alexandernied merci d'avoir souligné cela. C'était un problème d'étendue utilisant var code>. J'ai mis à jour ma réponse pour initialiser dfd code> en utilisant laisse code>.
Le problème que vous avez est que vous définissez finalement, résoudre et retourner un Single em> différé, même si votre boucle indique que vous avez l'intention de suivre plusieurs differts. p> Pour que l'exemple de fonctionne, j'ai inclus une mock asynceventer code> la fonction tirée de la documentation de jQuery. Voir l'extrait ci-dessous pour voir tout fonctionner comme prévu: <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
@DavidBray - Cela peut être vrai, j'essayais simplement de répondre à la question spécifique de l'utilisateur concernant l'objet de jQuery différé. Compte tenu de l'utilisation fréquente de var code> et cette question étant une question spécifique à la jQuery, il est possible que l'OP est dans un scénario dans lequel ils doivent prendre en charge les navigateurs plus anciens qui Ne supporte pas les promesses, comme IE .
Vous pouvez essayer ceci:
Vous devez passer par ce lien: Utilisation de plusieurs promesses différées - JavaScript / JQuery P>
var callAPI=function(){
const promise = new Promise((resolve, reject) => {
var api = require('modules/api');
resolve(api.request("GET","https://t25501-s39032.sandbox.mozu.com/events/priceadjustment"));
});
return promise;
}
function getInfo(){
const promise = new Promise((resolve, reject) => {
var allPromise=[];
for(var i=0;i<2;i++){
allPromises.push(callAPI());
}
return Promise.all(allPromises);
});
return promise;
}
getInfo().then((result)=>{
console.log("reached",result);
});
laissez le bal + i = $ .Deferred (); code> ce n'est pas valide que les noms de variable Syntax- JS ne peuvent pas être modifiés / générés de manière dynamique de cette manière en dehors de l'utilisation de certains espaces de noms globaux (c'est-à-dire les définir comme des propriétés sur la fenêtre code> objet).
Salut @ alexandinied édité
Bonjour Shubham - Malheureusement, ce code a toujours des problèmes. La principale que je vois, c'est que vous retournez le promess.Tous code> la première fois que vous passez par la boucle, il ne sera donc jamais itérer.
Ohhhhh;) @Alexandernied, c'est par erreur. Merci