Angularjs 有没有一种方法可以在不使用$q的情况下从$resource返回承诺?

Angularjs 有没有一种方法可以在不使用$q的情况下从$resource返回承诺?,angularjs,Angularjs,我对以下服务进行了编码: angular.module('App') .factory('TestService', ['$http', '$q', '$resource', function ( $http, $q, $resource) { var TestResource = $resource('/api/Tests', {}, { saveData: { method: 'PUT' }

我对以下服务进行了编码:

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”方法。

$resource在Angular的当前稳定版本(1.0.8)中无法返回承诺,但看起来它将在1.2版中出现。(v 1.1为不稳定分支):

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


学习文档网站教程的第11步。。。它回答了你的问题。如果您还没有下载教程并完成每个步骤,那么花费时间是值得的。为什么在您的服务中使用$q不是很有效?我同意在服务中使用$q。我只是想知道我是否可以通过返回一个承诺而不需要使用$q来简化代码。我改变了我的问题,使它更清楚一点。Thanks@charlietfl这很容易变成一个被接受的答案。@TheHippo-我不确定这是否正确。如果我正确读取对象,步骤11将返回一个带有方法的对象。