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将返回一个带有方法的对象。