我想从一个json文件中读取URL并将URL提供给具有$ http GET请求的其他javascript文件以执行该URL。我正在使用一项服务 在另一个服务文件中获取数据。当我运行它时,它在 bannerslides 函数中显示未定义。
文件:common.js
(function() {
angular.module('siteModule')
.service('loggerService', function ($http, $q)
{ var rox;
var deffered = $q.defer();
$http.get('/config/config.json').then(function (data)
{
deffered.resolve(data);
});
this.getPlayers = function ()
{
return deffered.promise;
}
})
})();
文件:siteService.js
(function() {
var confUrl;
angular.module('siteModule')
.service('siteService', function ($http, $q, loggerService)
{
loggerService.getPlayers().then(function (data) {
confUrl = data.data.baseUrl+data.data.urls.site;
console.log("GOTURL",confUrl);
});
this.bannerSlides = function(){
console.log("URL NOT GET",confUrl);
return $http({
method: "GET",
dataType: "json",
url: confUrl
}).then(function (response) {
// inspect/modify the received data and pass it onward
return response.data;
}, function (error) {
// inspect/modify the data and throw a new error or return data
throw error;
});
}
})
})();
答案 0 :(得分:1)
这是因为所有$http
次呼叫都是异步的。你需要将你的承诺联系起来。首先从json中获取您的URL,然后调用它。也就是将loggerService.getPlayers()
移到this.bannerSlides
函数中。
在此之前,为什么在记录器服务中需要$q
? $http
本身已经是一个承诺。
common.js:
(function() {
angular.module('siteModule')
.service('loggerService', function($http) {
this.getPlayers = function() {
return $http.get('/config/config.json')
}
})
})();
siteService.js:
(function() {
var confUrl;
angular.module('siteModule')
.service('siteService', function($http, $q, loggerService) {
this.bannerSlides = function() {
loggerService.getPlayers().then(function(data) {
confUrl = data.data.baseUrl + data.data.urls.site;
console.log("GOTURL", confUrl);
//move your return statement here
return $http({
method: "GET",
dataType: "json",
url: confUrl
})
});
}
})
})();