嗨,我正在努力理解Angular的痛苦和承诺。 我想知道所有的承诺何时完成,所以我可以隐藏“加载”消息。 所以这是我的代码示例:
$scope.buildTeam = function () {
$scope.Message = "loading...";
var deferred = $q.defer();
var promiseList = [];
c = $scope.teamModels[0];
for (index = 0; index < c.quantity; ++index) {
var assignment = new teamAssignment(c.assignmentTypeId, $scope.parentAssignment.AssignmentId, c.description);
promiseList.push(departmentService.addAssignment(assignment).then(function (result) {
//added lead/captain. Now insert visually on page
insertToScope($scope, result);
}));
}
}
$q.all(promiseList).then(function () {
deferred.resolve();
$scope.Message = "Loaded.";
});
}
问题是,在大数据拉动的情况下,$ scope.Message在数据插入页面之前显示“已加载”。 难道我还需要推迟insertToScope吗? InsertToScope只读取:
function insertToScope($scope, a) {
//get root scope
var rs = angular.element("#ngRootContainer").scope();
rs.parentAssig.push(a);
}
部门服务看起来像这样:
departmentModule.factory('departmentService', function ($http, $q) {
return {
addAssignment: function(assignment){
var deferred = $q.defer();
$http.post('/Department/addAssignmentReturnAssignmentRow', assignment).success(deferred.resolve).error(deferred.reject);
return deferred.promise;
}
});
所以我的问题是,在完成所有承诺后,我需要做什么来调用函数? 提前感谢您的反馈。
答案 0 :(得分:1)
$q.all
应该做你需要的。如果您的代码不起作用,我会看到两个选项:
promiseList
不包含您要等待的所有承诺。调试你的代码并检查是否传入了所有的promises。确保它是你传递的数组作为第一个参数。insertToScope
和&#39; B&#39;在您then
的{{1}}中,您应该看到$q.all
在控制台中。
这是一个简单的plunkr,展示了如何使用A
...
A
B
:http://plnkr.co/edit/9QH9Y0w7DG0WCouMuX82?p=preview