j'ai une obligation de faire ce qui suit:JavaScript promesses - En attente de
- obtenir une liste des « lignes » en appelant une fonction interne (getLines()).
- Sélectionnez la première ligne, effectuer une action
- Après la fin de l'action précédente, sélectionnez la ligne suivante et faire la même action
- Répétez l'opération pour toutes les lignes (3-20 en fonction de l'utilisateur)
J'ai le code suivant à la place:
App.Lines = response.data;
for (var _i = 0; _i < App.Lines.length; _i++) {
var makeCallPromise = new Promise(
function(resolve, reject) {
Session.connection.ol.makeCall(App.Lines[_i], callBackFunction(response) {
//this can take up to 30 seconds to respond...
resolve(response.data);
}, errorCallBackFunction(message) {
reject(message.error);
}, bareJid);
}
)
makeCallPromise.then(function(fulfilled) {
console.log("PROMISE WORKED!!!!!", fulfilled);
})
.catch(function(error) {
console.log("PROMISE FAILED!!!!!", error);
});
}
Mon espoir était que la boucle attendrait pour résoudre la promesse avant qu'elle poursuit la boucle, cependant, ce n'est pas le cas. Ma question est de savoir s'il est possible ou non d'arrêter la boucle jusqu'à ce que la résolution soit complète. Remarque - J'utilise la librairie bluebird JS pour les promesses. Merci!
Cordialement,
Gary
Je pense que vous devez 'return' la promesse d'une certaine façon. Comme dans ce cas, «satisfait» est la phrase clé que vous utilisez dans votre promesse. – ZombieChowder
Au lieu de boucler le tout, bouclez makeCallPromise et placez ces promesses dans un tableau. Ensuite, utilisez Promise.all (tableau) et ajoutez les appels 'then()' après la promesse.all. Le résultat sera que toutes les promsies seront résolues avant que le premier 'then()' ne soit appelé, ainsi toutes les données sont disponibles pour une nouvelle boucle.Sinon, n'utilisez pas du tout de boucle, mais effectuez le makeCallPromise suivant après que le premier a été résolu. – Shilly
@Shilly Merci, j'ai essayé d'utiliser cela dans la réponse fournie par marvel308, avec Promise.each(). Ma réponse est là sur ce que j'ai fait et ce qui s'est passé. – Gary