在服务模块中,我正在进行$ 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行在上面的代码中显示为注释。