Sto lavorando a un'app angularJS e questo è il mio primo sito Web che utilizza questo framework. Nella mia app ho bisogno di fare una chiamata $ http all'interno di un ciclo for. Con nel ciclo prima della successiva iterazione, voglio attendere la risposta della mia precedente chiamata. Qual è il modo migliore e più semplice per farlo. Ho provato a utilizzare il callBack, $ q.all(), .questo in tutte queste solo l'ultima richiesta sta attraversando. Per favore aiuto.
Nota: la mia API che sto chiamando tramite $ http non può accodare richieste.
Modifica: Ho provato entrambi gli approcci seguenti, in entrambi i casi solo l'ultima richiesta è stata eseguita correttamente. Puoi dirmi cosa c'è di sbagliato che sto facendo qui.
Approccio 1:
var promiseArray=[];
for(var i=0;i<items.length;i++)
{
var promise=services.Post(items[i]);
promiseArray.push(promise);
}
$q.all(promiseArray).then(data)
{
...
}
Approccio 2:
var promises = [];
for (var i = 0; i < items.length; i++) {
var deffered = $q.defer();
var promise = services.Post(items[i]);
promise.success(function(data) {
deffered.resolve(data);
})
promises.push(deffered);
}
var result = $ q.all (promesse);
EDIT: 2 Codice:
Services.Post = function(lineItemId, submitUrl) {
var url = (submitUrl) ? submitUrl : Services.serviceUrl;
return $http.post(url, {
"LineItemID": lineItemId
}).
success(function(data, status, headers, config) {
Services.processResponse(data, status, headers, config);
}).
error(function(data, status, headers, config) {
JL('Angular').error('Error response when calling Service ' + config);
});
};
un'occhiata al lib asincrona (https://github.com/caolan/async) è possibile caricare sul browser tramite browserify/webpack/JSPM –