我有工厂和服务。工厂为getDriversData
,服务为collectDrivers
。在服务中,我需要从JSON文件中获取一些数据,因此我使用了$http.get
。我需要将数据从服务发送到工厂,因为我将在工厂中对数据进行一些处理。代码如下:
.service('collectDrivers', function($http) {
// Get JSON
$http.get('js/bib.json').success(function(response) {
console.log('ENTERING HTTP GET IN collectDrivers');
console.log('RESPONSE DALAM collectDrivers', response);
// Put all response data into globalArray using loop
for(i = 0; i < response.length; i++) {
// If type is driver, put the uid in globalArray
if(response[i].type == 'driver') {
globalArray[i] = response[i].uid;
}
}
});
return globalArray;
})
.factory('processDriversData', function(collectDriversData) {
// I will be doing some processing in the collected data
// so I want to make sure it is already available in the
// globalArray
console.log('Content of globalArray: ', globalArray);
})
问题是,globalArray
尚未填写。但是,如果我尝试在控制器中调用globalArray,那么数据就在那里。那么,如何将数据从服务传递到工厂?我是新手,所以如果我错了,请告诉我正确的方法。
答案 0 :(得分:0)
无需全球化。由于异步操作,您需要回调/承诺。下面是使用回调:
服务
.service('collectDrivers', function($http) {
function getData(callbacl) {
var globalArray = [];
// Get JSON
$http.get('js/bib.json').success(function(response) {
console.log('ENTERING HTTP GET IN collectDrivers');
console.log('RESPONSE DALAM collectDrivers', response);
// Put all response data into globalArray using loop
for (i = 0; i < response.length; i++) {
// If type is driver, put the uid in globalArray
if (response[i].type == 'driver') {
globalArray[i] = response[i].uid;
}
}
return callback(globalArray);
});
}
})
工厂:
.factory('processDriversData', function(collectDriversData) {
var globalArray;
collectDriversData.getData(function(data){
globalArray = data;
console.log('Content of globalArray: ', data);
})
})