AngularJS promise 链

标签 angularjs promise chain

我的应用程序应该打开一个弹出窗口,要求用户确认,然后进行 ajax 校准并关闭弹出窗口。
我尝试使用promise链来做到这一点(我已经使用过它,并且我记得它应该以这种方式工作),但它似乎在调用reservationService之后被阻止.confirm($scope.object);。现在它是一个用 setTimeout$q 实现的假服务,只是为了返回一个 promise (将来它将进行 ajax 调用)。这是有效的代码还是我没有理解 Promise 的工作原理?
对于弹出窗口,我选择 AngularUI,代码如下:

 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;
}

已解决setTimeout 更改为 $timeout Angular 的服务

最佳答案

使用 $timeout 而不是 setTimeout '因为它在 Angular 范围内一起工作,强制 digest 阶段(或使用 setTimeout 内的 $scope.apply())。

关于AngularJS promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18484986/

相关文章:

angularjs - 如何在 AngularJS 的 $q 中处理单个 404

javascript - 如何从递归请求返回 promise 并在数据匹配条件时解决它?

javascript - jQuery 方法链 - 获取前一个方法的返回值的方法

javascript - 是否可以在不向控制台发送错误消息的情况下停止链?

javascript - Chain React setState 回调

django - 使用 Django 的 Angular JS 部分和静态文件

javascript - 从另一个 Controller 调用 Angular Controller

javascript - 如何在 angularjs 应用程序中添加 sitemap.xml

javascript - Angular - 我的函数正在无限循环中运行

javascript - 如何在 for 循环中创建 Promise 后使用 Promise.all()