我有一个角度服务迭代通过一个列表进行web api调用,在数据库中添加/修改记录(在一个小记录集上运行 - 最多10个记录要更新)。由于角度服务正在返回promise,因此在循环完成后,角度会重新加载状态,并更新一些数据。只有在刷新页面后,列表才会完全更新。一切都按预期工作;但是我认为在数据库完全完成其操作之前,angular会返回。有没有办法让角度等待返回所有更新?
这是迭代列表(最多10项)调用角度服务:
for (var i = 0, ii = $scope.Model.permissions.length; i < ii; i++) {
//if id === 0, it is a new record
if ($scope.Model.permissions[i].New === true && $scope.Model.permissions[i].Deleted === false) {
angularService.update($scope.Model.permissions[i]);
}
}
在过去,我使用$q
等待所有承诺在执行一段代码之前得到解决:
$q.all([$scope.Model.permissions.$promise,
$scope.Model.configurations.$promise
]).then(function () {
$scope.dataLoaded = true;
});
将每个承诺分配给资源调用:
$scope.Model.permissions = permissionFactory.fetch({ id: $stateParams.id);...
我认为我不能仅仅因为我在列表上循环而使用这种模式。
任何帮助或指导都将不胜感激!
答案 0 :(得分:4)
ArrayOFPromises = [];
for (var i = 0, ii = $scope.Model.permissions.length; i < ii; i++) {
//if id === 0, it is a new record
if ($scope.Model.permissions[i].New === true && $scope.Model.permissions[i].Deleted === false) {
ArrayOFPromises.push(angularService.update($scope.Model.permissions[i]));
}
}
然后
$q.all(ArrayOFPromises).then(function () {
//dosomething
});