Ho bisogno di aggiornare i dati per ogni oggetto in un array usando un ciclo for e una volta che tutti i dati sono stati acquisiti, eseguire una funzione. Non voglio mescolare jQuery in questo e farlo nel modo corretto angolare di fareCorretto modo di gestire per ogni chiamate Ajax in Angular
Ecco quello che sto facendo,
$scope.units = ['u1', 'u2', 'u3'];
$scope.data = null;
//get individual unit data
$scope.getUnitData = function(unit){
service.getUnitData(unit).success(function(response){
$scope.data.push({'id' : response.id , 'value' : response.value});
});
};
$scope.updateAllUnits = function(){
$scope.data = null ; //remove existing data
angular.forEach($scope.units,function(val,key){
$scope.getUnitData(val);
};
console.log($scope.data); // Need to show all the data but currently it does not as the for each loop didn't complete
};
Il servizio è definito come.
app.factory('service',function($http){
return {
getUnitData : function(unit){
return $http({
url : myURL,
method : 'GET',
params : {'unit' : unit}
});
}
}
});
Come si riceve una richiamata quando tutto il pull è stato eseguito nel ciclo for?
'promises' nel codice è solo un array. In che modo $ q sa che questo array ha tutti gli oggetti? – lostpacket
Stiamo promuovendo promesse all'interno di 'forEach', che è sincrono. Quando chiamiamo '$ q.quando 'le promesse vengono create, ma non risolte (ci sono ancora dati che arriveranno dal server). Il '$ q.quando' attende che tutto questo sia completato. Ho rimosso una parte consistente di questa risposta quando ho realizzato che '$ http' restituisce già una promessa. – Andyrooger
'$ q.quando 'può prendere una serie di promesse? Se è così, buona risposta! –