AngularJS在使用$ resource时隐藏承诺

时间:2014-08-07 14:38:46

标签: angularjs angular-resource angular-promise

我有一个简单的RESTful服务,如下所示:

services.factory('UserService', ['$resource, function() {
   return $resource('...');
}]);

这种方式我必须这样调用:

UserService.get({id: userId}, function(response) {
 // do something.
});

我希望能够做到这样的事情:

UserService.get(userId).then(function(response) {
    // do something with data
});

有可能吗?我正在努力解决这个问题,最终总是不得不在我的控制器中使用$ promise.then()。我想在我的RESTful服务中“隐藏”$ promise。

2 个答案:

答案 0 :(得分:0)

$resource故意通过......嗯... $promise公开承诺,因此您可以使用UserService来抽象:

services.factory("UserService", ["$resource", function ($resource) {
    var userService = $resource("...");

    return {
        get: function (id) {
            return userService.get({id: id}).$promise;
        }
    }
});

答案 1 :(得分:0)

根据Todd Motto,你可以像这样封装你的服务:

  

"我们在函数内创建一个具有相同名称的Object。这有助于文档以及评论生成的文档。"

function AnotherService () {

    var AnotherService = {};

    AnotherService.someValue = '';

    AnotherService.someMethod = function (idParam) {
        return $resource(apiUrl + ":action/:id", {}, {
            get: {method: 'GET', params: {id:idParam, action: 'get'}
    };

    return AnotherService;

}

angular.module('app')
    .factory('AnotherService', AnotherService);