在角配置中使用带有$ http和$ q的服务/提供程序

时间:2014-02-10 21:49:30

标签: javascript angularjs promise

我想在app.config部分为每个控制器加载一些配置。每个控制器都需要加载不同但非互斥的数据集。我无法弄清楚如何实现这一目标。

.config(['$routeProvider', '$locationProvider', 
        function($routeProvider, $locationProvider){


    $routeProvider
    .when('/', {
        templateUrl: "partials/pages/dashboard.html",
        controller: "dashboard_controller",
        resolve: { dash_config: 'SomeConfigD'},
    })
    .when('/a', {
        templateUrl: "partials/pages/a.html",
        controller: "a_controller",
        resolve: { dash_config: 'SomeConfigA'},
    })
}])

但是,我不想为someConfigAsomeConfigD编写单独的工厂,因为它们共享代码。我想要类似的东西,

app.factory('configFactory', function(...){
    var factory = ;

    function get1(){
        // some $http calls here and return a promise
    }

    function get2(){
        // some $http calls here and return a promise
    }

    function get3(){
        // some $http calls here and return a promise
    }
    factory.configA = function(){
        // return a promise to resolve both get1 and get2
    };
    factory.configD = function(){
        // return a promise to resolve both get2 and get3
    };
})

我该怎么做?

1 个答案:

答案 0 :(得分:0)

听起来你正在寻找的是$q.all,你可以阅读here

我还制作了一个使用你工厂的fiddle,虽然我是在模块的run方法中做的,因为我不想处理创建工厂。它看起来像这样:

f.configA = function(){
    var get12 = $q.all([
        get1().then(thenFn),
        get2().then(thenFn)
    ]).then(function() {
        console.log('both resolved');
    });
    return get12;
};

只有当两个promises都已解决时才会调用then中的函数(在不同的时间发生,使用$timeout进行模拟

现在get函数可以重用了,希望这有帮助!