[英]async callback: nested $http.get calls
我正在通过$ http.get调用使用角度工厂,以返回带有所有总线及其仓库和区域属性的Promise对象。
我正在使用以下代码遇到经典的异步请求计时问题。 Console.log(allBuses)返回一个空对象,然后console.log(depot)返回嵌套的$ http.get函数中的软件仓库名称。
如果不使用setInterval或Timeout方法,在为所有总线分配了仓库和区域属性后,如何解决allBuses对象?
.factory('busesByDepot', ['$http', 'Camelize', function($http, Camelize){
// get all depot data from depots object
return $http.get('data/depotList.json').success(function(data) {
allBuses = {};
data.data.forEach(function(depot){
var camelName = Camelize.strToCamel(depot.name);
if(depot.active == true){
$http.get('data/'+ camelName +'.json').success(function(data) {
data.forEach(function(d){
allBuses[d.num] = {depot: camelName, area: d.area};
})
console.log(depot);
})
}
})
console.log(allBuses);
});
}])
.factory('busesByDepot', ['$http', 'Camelize', '$q', function($http, Camelize, $q){
var deferred = $q.defer();
// get all depot data from depots object
$http.get('data/depotList.json').success(function(data) {
allBuses = {};
inc = 0;
data.data.forEach(function(depot){
var camelName = Camelize.strToCamel(depot.name);
if(depot.active == true){
$http.get('data/'+ camelName +'.json').success(function(data) {
data.forEach(function(d){
allBuses[d.num] = {depot: camelName, area: d.area};
})
inc++;
if(inc ==2){
deferred.resolve(allBuses)
};
})
}
})
});
return deferred.promise;
}])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.