我試圖用$ q.all來等待所有的承諾都解決了,但在第一次承諾完成後調用!
我在做什麼錯了?
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);
});
}
編輯
分析一個稍微深一點的問題,當一些答覆是錯誤出現這種情況。例如,當服務器返回header("HTTP/1.0 418 I'm A Teapot: " . $filename);
,客戶端控制檯會是這樣:
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
你在控制檯中看到什麼? – yeouuu
第一次調用saveAudit的響應:第一次$ http調用(審覈有4個元素)。奇怪的是,進展得到了'最後'提升4次(每次審覈一次)。 – Miquel