使用Promises只是为了控制执行顺序

时间:2014-02-13 22:14:25

标签: angularjs asynchronous promise

我想知道这是否可行,但我有一系列函数,其中promises将是一个完美的排序解决方案,但这些函数不依赖于先前承诺的数据。我想使用promises来控制执行顺序,但我仍然需要函数来访问范围闭包。

以下是有关原因的背景信息。在客户端我有一些对象。各种操作会导致客户端保存/更新此对象。我们最近有一个竞争条件,其中两个动作如此靠近,服务器实际上破坏了数据库中的对象。我认为使用promise链会很好,所以更新请求会等到没有其他挂起的更新请求。我需要发送到服务器的更新信息显然存在于作用域中,因此我需要能够在pendingRequestPromise解析时访问它。

我基本上有这样的东西:

scope.$on("UPDATE", function(event, callback){
    $http.post("update", scope.myObj).success(function(updateInfo){
        callback(updateInfo);
    });
};

如果用户做的动作足够快,我会向服务器发送2个对象,导致上周出现问题。

1 个答案:

答案 0 :(得分:1)

我建议使用$ q服务,如下所示:

//disable all stuff you want to user not to click with ng-disable
$scope.pageLoading=true;

var update1Promise = $http.post("update1", scope.myObj).success(function(updateInfo){
        callback(updateInfo);
    }),
    update2Promise = $http.post("update2", scope.myObj).success(function(updateInfo){
        callback(updateInfo);
    }),
    update3Promise = $http.post("update3", scope.myObj).success(function(updateInfo){
        callback(updateInfo);
    });

$q.all([update1Promise,update2Promise,update3Promise])then(function() {
    $scope.pageLoading=false;
});