赛车条件:Angular vs Web API&数据库

时间:2015-05-08 14:05:50

标签: javascript angularjs

我有一个角度服务迭代通过一个列表进行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);...

我认为我不能仅仅因为我在列表上循环而使用这种模式。

任何帮助或指导都将不胜感激!

1 个答案:

答案 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
});