Sto provando ad usare $ q.all per aspettare che tutte le promesse siano risolte ma si chiama dopo che la prima promessa è finita!
Cosa sto facendo male?
function sendAudits(audits) {
var promises = [];
$scope.sendAudits = {
progress: 0
};
angular.forEach(audits, function (audit, idAudit) {
promises.push(saveAudit(audit));
});
$q
.all(promises)
.then(function (data) {
console.log(data);
}, function (errors) {
console.log(errors);
});
}
function saveAudit(audit) {
var filename = audit.header.id + ".txt";
return $http({
method: 'PUT',
url: '/audits/audits.php?filename=' + encodeURIComponent(filename),
data: AuditSvc.getPlainAudit(audit.header.id)
}).finally(function() {
$scope.sendAudits.progress += 1;
console.log("FINALLY: " + audit.header.id);
});
}
EDIT
Analizzando un po 'più profondo il problema, questa situazione si verifica quando alcune delle risposte sono errore. Per esempio, quando il server restituisce header("HTTP/1.0 418 I'm A Teapot: " . $filename);
, console client sarebbe come:
PUT http://localhost:8182/audits/audits.php?filename=1.txt 418 (I'm A Teapot: 1.txt)
FINALLY: 1
Object {data: "", status: 418, config: Object, statusText: "I'm A Teapot: 1.txt"}
PUT http://localhost:8182/audits/audits.php?filename=2.txt 418 (I'm A Teapot: 2.txt)
FINALLY: 2
PUT http://localhost:8182/audits/audits.php?filename=3.txt 418 (I'm A Teapot: 3.txt)
FINALLY: 3
PUT http://localhost:8182/audits/audits.php?filename=4.txt 418 (I'm A Teapot: 4.txt)
FINALLY: 4
Cosa vedi nella console? – yeouuu
La risposta per la prima chiamata a saveAudit: prima chiamata $ http (i controlli hanno 4 elementi). La cosa strana è che i progressi vengono sollevati 4 volte in "finalmente" (uno per ogni audit). – Miquel