1

我有一个简单的 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。

4

2 回答 2

0

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

“我们在函数内部创建了一个同名的对象。这也可以帮助文档以及评论生成的文档。”

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);
于 2014-08-07T15:22:31.620 回答
0

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

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

    return {
        get: function (id) {
            return userService.get({id: id}).$promise;
        }
    }
});
于 2014-08-07T14:43:29.293 回答