下面的函數試圖返回一個承諾,這將只有當所有的異步HTTP調用完成解決創建:
$scope.saveThat = function() {
var promises = [];
for (var i = 0; i < array.length; i++) {
var newPromise = $q.defer();
promises.push(newPromise);
// some more code...
(function (i, newPromise) {
$http(httpData)
.success(function (response) {
newPromise.resolve('Success');
})
.error(function (response) {
newPromise.reject('Error');
});
})(i, newPromise);
}
return $q.all(promises);
};
而下面的代碼片段調用這個功能。
// save this...
var promise1 = $rootScope.saveThis(result.Person);
promise1.then(function (success) {
}, function (error) {
saveErrorMessage += 'Error saving this: ' + error + '.';
});
// save that...
var promise2 = $rootScope.saveThat(result.Person);
promise3.then(function (success) {
}, function (error) {
saveErrorMessage += 'Error saving that: ' + error + '.';
});
// wait until all promises resolve
$q.all([promise1, promise2])
.then(
function (success) {
$scope.$emit(alertEvent.alert, { messages: 'Saved successfully!', alertType: alertEvent.type.success, close: true });
}, function (error) {
$scope.$emit(alertEvent.alert, { messages: saveErrorMessage, alertType: alertEvent.type.danger });
});
我的問題是,第二個承諾($q.all([promise1, promise2])
)即使解決了當promise2的承諾還沒有得到解決。
停止(http://stackoverflow.com/q/23803743/1048572)和你的問題就會迎刃而解。 – Bergi
@Bergi,非常感謝!是的,我肯定是新的承諾 –