Birden fazla api'nin her birinin üzerine dönen bir $ http araması üzerinde çalışıyorum ve tüm verileri bir nesnede döndürür. $ Http araması yapıldığında genellikle çözüme hazır sözüm var. Buna benzer:
function getAllData(api) {
return $http({
method: 'GET',
url: '/api/' + api
})
.then(sendResponseData)
.catch (sendGetVolunteerError);
}
mevcut işlev Her API üzerinde döngüler ve bir diziye API her nesne iter ve daha sonra genel bir dizi içine iter. Düzleştirilmesi gereken çok boyutlu bir diziyi döndüren bu işleyiş vardı.
Bunu bir sözle iade etmek istiyorum, ancak undefined
döndürüyor. Şimdiye kadar elimde ne var? Buna yaklaşmanın daha iyi bir yolu var mı?
DataService:
function getSearchData() {
return {
loadDataFromUrls: function() {
var apiList = ["abo", "ser", "vol", "con", "giv", "blo", "par"];
var deferred = $q.defer();
var log = [];
angular.forEach(apiList, function (item, key) {
var logNew = [];
$http({
method: 'GET',
url: '/api/' + item
}).then(function (response) {
angular.forEach(response.data, function (item, key) {
this.push(item);
}, logNew);
return logNew;
});
this.push(logNew);
}, log);
$q.all(log).then(
function (results) {
deferred.resolve(
JSON.stringify(results))
},
function (errors) {
deferred.reject(errors);
},
function (updates) {
deferred.update(updates);
});
return deferred.promise;
}
};
};
Denetleyici: Sen $q
(Kodunuzdaki böyle sözler çözülmezse) 'de vaat listesini eklemek gerekir
function getSearchData(){
return dataService.getSearchData.loadDataFromUrls;
}
$scope.searchData = getSearchData();
Ben burada neler olduğunu% 100 emin değilim - sen boş dizileri ('logNew') beklemek istediğiniz' log 'dizisine itmemek? Bunun yerine '$ http' iadesiyle '' sözünü '' zorlamıyor musunuz? –