有没有办法我可以从$资源返回一个承诺而不需要使用$ q?

时间:2013-04-21 10:46:57

标签: angularjs

我编写了以下服务:

angular.module('App')
    .factory('TestService', ['$http', '$q', '$resource', function (
                          $http, $q, $resource) {

        var TestResource = $resource('/api/Tests', {}, {
            saveData: { method: 'PUT' },
            deleteData: { method: "DELETE", params: { TestId: 0 } }
        });

        var factory = {

            query: function (selectedSubject) {
                var deferred = $q.defer();
                TestResource.query({ subjectId: selectedSubject },
                   function (resp) {
                       deferred.resolve(resp);
                   }
                );
                return deferred.promise;

                //return Test.query({ subjectId: selectedSubject });
            }

        }
        return factory;
}]);

在我的控制器中,我这样称呼它:

TestService.query($scope.selectedSubject)
                        .then(function (result) {
                            $scope.gridData = result;
                        }, function (result) {
                            alert("Error: No data returned");
                        });

有没有办法可以通过在我的服务中没有$ q来减少几行代码。有没有办法可以从$ resource返回一个承诺?我已经尝试了注释掉的代码,但这给了我一个错误,说没有“.then”方法。

1 个答案:

答案 0 :(得分:3)

$ resource无法在当前稳定版本的Angular(1.0.8)中返回一个承诺,但看起来它将在版本1.2中出现。 It was added in v1.1.3(v 1.1是不稳定的分支):

  

$ resource :通过$ then和$ resolved(dba6bc73)公开基于承诺的api