Hello
Je travail actuellement sur un petit projet en angular. J'ai une fonction qui boucle sur N éléments, et j'aurais besoin de déclencher une autre fonction une fois que la boucle est terminée.
J'ai regardé du côté des promises, mais je n'ai pas vu comment faire ça.
Est-ce quelqu'un saurait faire ça ?
Merci :)
Bonjour,
voila comment utiliser les Promises en AngularJS.
var myApp = angular.module('myApp', []);
myApp.factory('myService', function ($q) {
return {
doLoop: function () {
// creation d'une promise
var deferred = $q.defer();
var array = [];
for (var i = 0; i < array.length; i++) {
// do stuff
}
// resolution de la promise
// il est aussi possible de la rejeter avec .reject()
deferred.resolve(array);
// on renvoie la promise
return deferred.promise;
}
}
});
myApp.controller('MyCtrl', function ($scope, myService) {
// on recupere la promise que la methode va etre resolue
var promise = myService.doLoop();
promise.then(function (arr) {
// on obtient le resultat de .resolve() ici
// attention arr n'est accessible seulement dans la closure
$scope.items = arr;
});
// on peut aussi avoir le resultat du rejet
// promise.reject(function(err) { })
});
moi le truc que je comprend pas, c'est pourquoi / comment / quel est l'âge du capitaine ?
Enfin ok, Javascript c'est de l'asynchrone lorsque tu fait des appels serveurs, m'enfin si tu fait
$scope.awesomeFunction = function(){
$scope.func1();
$scope.func2();
}
func2 sera executé une fois que func1 aura finit...
Non,
function inner1() {
console.log('start inner 1');
setTimeout(function() {
console.log('stop inner 1');
}, 2000);
}
function inner2() {
console.log('start inner 2');
setTimeout(function() {
console.log('stop inner 2');
}, 1000);
}
(function outer() {
inner1();
inner2();
})();
Ce code te renverra
start inner 1
start inner 2
stop inner 2
stop inner 1
prbaron donc logiquement avec les promises c'est jouable ?
Pour être plus clair, j'ai une fonction avec un forEach, qui doit lancer une autre fonction QUAND le forEach est terminé
function myFor() {
angular.forEach(files, function(file, key) {
//boucle
}, files);
secondFunction();
}
suivant ce que tu fais dans ton forEach, tu peux garder tel quel. Si le code est synchrone dans le forEach, c'est bon.
Au final j'aurais plusieurs fonctions à enchainer, si les précentes sont terminées.
J'ai regardé du côté des promises avec $q, mais j'ai du mal a capter comment faire :(
Tu aurais des ressources/tutoriaux à ce sujet ?
merci d'avance