承诺不在angularJs中处理服务中的REST调用

时间:2014-12-17 11:56:26

标签: javascript angularjs promise angular-promise

我在服务层有一个REST调用,我在其上定义了一个使这个异步调用成为同步调用的promise,我从我的控制器方法调用它。以下是代码:

服务方式:

app.lazyload.factory('myService',['$http','$q', function($http,$q) {

        return{
            showAll :function ()
            {
                var deferred = $q.defer();
                $http.post('rest/getAll?cd='+ (new Date()).getTime())
                .success(function(data)
                {
                    deferred.resolve(data);
                })
                .error(function(data)
                {
                    deferred.reject(null);
                    console.log("in error block");
                });

                 return deferred.promise;
            }
        };

    }]);

控制器方法:

$scope.showAll = function()
                {
                    var promise = myService.showAll();

                    promise.then(function success(data) {
                        $scope.allitems = data;
                        console.log(data);
                        console.log('$scope.allitems'+$scope.allitems[0].name);
                        $scope.showAllitems = true;
                        blockMyUI();
                    }, function error(msg) {
                      console.error(msg);
                    });

                };

在调试这个javascript时,如果我停止它2秒钟我得到了响应,但如果不停地做,我不会得到它。这意味着所有REST调用都正常工作,但我的“承诺”中存在一些问题。这个承诺不是等待REST调用完成我想要的。

1 个答案:

答案 0 :(得分:0)

尝试在控制器中使用$ watch。

var dataFromFactory = '';
myService.showAll().then( function(data){
   dataFromFactory = data;
}
$scope.$watch(function () {
    return dataFromFactory;
},
function (val) {
        $scope.allitems = val;
        console.log(val);
        //the rest value you want.
}, false);