我可以在另一家工厂内使用工厂一起加入两个REST请求吗?

时间:2014-02-06 15:48:45

标签: angularjs javascript-framework

我有两个工厂如下:

angular.module('categoryResource', ['ngResource', 'userResource'])
.factory('categories', function ($http, users){
    var factory = {};
    factory.getCategories = function () {
        return $http.get('/api/userCategories');
    };
    factory.getCategoriesUsers = function () {
        //call factory.getCategories(), parse the request to make it nice and tidy
        //then call users.getUsers(), tidy them up in the same way as categories, join them together and return them all in a nice package.
    };

    var handleCategoriesUsers = function (data, status) {

    }

    return factory;
});

angular.module('userResource', ['ngResource'])
.factory('users', function ($http) {
    var factory = {};
    factory.getUsers = function () {
        return $http.get('/api/users');
    };
    return factory;
});

我已经使用类别创建了一个漂亮的treeView,但我还希望将用户添加到这些类别中;所以为此我想我只是将用户格式化为我的treeView算法已经可以使用的东西。

我的问题是,我可以在类别工厂(或者甚至是完全不同的模块/工厂)中以某种方式进行此操作,并且只是同时返回连接的结果吗?如果有,怎么样?我是否需要像往常一样为$ http.get定义处理程序?那么在那个处理程序中,调用另一个get然后为它定义一个处理程序然后返回结果?

1 个答案:

答案 0 :(得分:1)

我并非100%确定我理解这个问题,但你看过$ q.all吗?您似乎希望将多个承诺组合/组合成一个易于处理的单一包。我给你一个描述和一些代码示例,但egghead做得更好:https://egghead.io/lessons/angularjs-q-all

这是你正在寻找的吗?

编辑:如果只是倾销链接,那就不赞成了:

var all = $q.all([one.promise, two.promise, three.promise]);
    all.then(success)

    function success(data) {
        console.log(data);
    }