AngularJS承诺链

时间:2013-08-28 10:10:04

标签: angularjs promise chain

我的应用程序应该打开弹出窗口向用户询问确认,然后制作ajax cal并关闭弹出窗口。
我尝试使用 promise 链(我已经使用它,我记得它应该以这种方式工作),但它似乎在调用{{1}后阻止}。现在,这是一个用reservationService.confirm($scope.object);setTimeout实现的虚假服务,只是为了返回一个承诺(将来它将进行ajax调用)。这是一个有效的代码还是我没有发现承诺是如何运作的? 对于弹出窗口,我选择AngularUI,代码如下:

$q

reservationService:

 reservationService.book($scope.object, day)
        .then(function(){
            var dialogOpts = {/* dialog options omitted*/}
            return $dialog.dialog(dialogOpts).open();

        })
        .then(function(result){
            console.log('confirmed? ', result);
            if (result){
                //After this line it doesn't do nothing, also if the promise is resolved 
                return reservationService.confirm($scope.object);
            }
        })
        .then(function(){
            //this function is never executed
            $scope.$emit('object:detail',{object: $scope.object});
        });

解决 使用function confirm(){ var deferred = $q.defer(); setTimeout(function(){ console.log('Confirming'); deferred.resolve(true) }, 500); return deferred.promise; } angular的服务更改setTimeout

2 个答案:

答案 0 :(得分:6)

使用$timeout代替setTimeout',因为它在角度范围内协同工作,强制digest阶段(或$scope.apply()内使用setTimeout

答案 1 :(得分:2)

你能试试吗

//skipping the first then
.then(function(result){
            var deferred = $q.defer();
            console.log('confirmed? ', result);
            if (result){
                //After this line it doesn't do nothing, also if the promise is resolved 
                return deferred.resolve(reservationService.confirm($scope.object));
            }
            deferred.resolve();
            return deferred.promise;
        })
.then(function(){
                //this function is never executed
                $scope.$emit('object:detail',{object: $scope.object});
            });

对于链接,那么最后一个成功或失败函数应该返回一个promise。正如$q documentation提及

  

然后(successCallback,errorCallback) - 无论什么时候承诺   已经或将要被解决或拒绝,然后称之为成功或   一旦结果可用,就会异步回调错误回调。该   使用单个参数调用回调:结果或拒绝   原因。

     

此方法返回通过解析或拒绝的新承诺   successCallback或errorCallback的返回值。