在AngularJS服务中正确调用promise

时间:2015-11-03 20:23:48

标签: javascript angularjs promise angular-promise

在服务模块中,我正在进行$ http调用以读取配置文件,然后根据它调用另一个$ http调用来获取一些值。我的问题是如果直接运行第二次调用失败,但是当我调试它成功时。因此,在我看来,链式承诺的结构不正确。

angular.module('swwf-app').service('lwwfService', ['$http', '$q', '$rootScope', function($http, $q, $rootScope)
    {
        var lwwfService = this,
            configDefer = $http.get('/config.json').then(setupConfig).catch(configError),
            locationDefer = configDefer.then(setupLocation).catch(configError);

    function setupLocation(config)
    {
        if($rootScope.shortname)
        {
            return $http({
                url: config.backend_endpoint + '/locations/' + $rootScope.shortname,
                method: "GET"
            }).then(function(loc){
                return loc.data;
            });
        }

当我打电话给我时,我的locationDefer失败了。我如何构建它,以便locationDefer成功?

上述功能由另一个服务功能调用,如下所示

    lwwfService.getReports = function(params)
    {
        params = params || {};

        return $q.all([configDefer, locationDefer]).then(function(responses)
        {
            var config = responses[0];
            // Line 55: this following line generates the error
            var location = responses[1][0];
            var thisUrl = config.backend_endpoint + '/location/'+location.location_id+'/reports';
            return $http(
            {
                url: thisUrl,
                method: "GET",
                params: params || {}
            });
        });
    };

    function configError(err)
        {
            throw 'Error encountered:' + err;
        };

我在调用时在浏览器控制台中收到的错误是

TypeError: Cannot read property '0' of undefined
at lwwfService.js:55
...

第55行在上面的代码中显示为注释。

0 个答案:

没有答案