Я работаю над вызовом $ http, который пересекает каждый из нескольких api и возвращает все данные в одном объекте. У меня обычно есть обещание, готовое к разрешению, когда был получен вызов $ http. Подобно этому:
function getAllData(api) {
return $http({
method: 'GET',
url: '/api/' + api
})
.then(sendResponseData)
.catch (sendGetVolunteerError);
}
Текущая функция У меня есть петли над каждым апи и помещает каждый объект в апи в массив, а затем толкает его в общий массив. У меня было это функционирование, возвращая многомерный массив, который нужно было сгладить.
Я хотел бы вернуть это в обещание, но возвращаю undefined
. Вот что у меня есть до сих пор? Есть ли лучший способ приблизиться к этому?
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;
}
};
};
Контроллер:
function getSearchData(){
return dataService.getSearchData.loadDataFromUrls;
}
$scope.searchData = getSearchData();
Я не 100% уверен, что здесь происходит - вы не толкать пустые массивы ('logNew') в массив' log', который вы хотите подождать? Если вы не будете нажимать 'обещание', возвращенное' $ http' вместо этого? –