Я делаю простое угловое приложение для управления доходами. Доходы поступают из проектов, которые я храню в json (для целей тестирования).Угловое обслуживание, вызывающее другое обслуживание
Итак, в основном, я использую услугу в Angular, чтобы получить этот json, и я хотел бы получить еще одну услугу, которая вызывает службу проектов и фильтрует доходы от каждого проекта.
Вот код:
facturateApp.service('Projects', function($http){
var Projects = {
async: function() {
var promise = $http.get('base.json').then(function (response) {
return response.data;
});
return promise;
}
};
return Projects;
});
facturateApp.service('Incomes', function(Projects){
var incomes = [];
Projects.async().then(function(d) {
var projects = d;
angular.forEach(projects, function(project){
if(typeof(project.account.accountAmount) == 'number' && project.account.accountAmount > 0){
var newIncome = {};
newIncome.projectName = project.projectName;
newIncome.clientName = project.clientName;
newIncome.typeIncome = "Accompte";
newIncome.amount = project.account.amountAccount;
newIncome.date = project.account.accountDate;
newIncome.notes = project.account.accountType;
incomes.push(newIncome);
}
});
angular.forEach(projects, function(project){
if (typeof(project.total.totalAmount) == 'number' && project.total.totalAmount > 0){
var newIncome = {};
newIncome.projectName = project.projectName;
newIncome.clientName = project.clientName;
newIncome.typeIncome = "Accompte";
newIncome.amount = project.total.totalAmount;
newIncome.date = project.total.totalDate;
newIncome.notes = project.total.totalType;
incomes.push(newIncome);
}
});
});
console.log(incomes); // still returns [];
return incomes;
});
Моя проблема заключается в том, что последний журнал возвращает пустой массив. На самом деле он работает так, как предполагалось: incomes
возвращается до Projects.async().then(function(d)
.
Но я не знаю, ждать эту функцию, которая будет выполняться перед возвращением incomes
в сервис, который называют еще одна услуга ...
Любая помощь?
Можно ли есть что-то проще назвать в контроллере (я имею в виду что-то вроде «Доходы», которое возвращает массив «доходы»)? – enguerranws
@enguerranws 'Incomes.buildAndGetIncomes.' будет возвращать массив доходов. довольно простой. Другой способ, если вы хотите, реализовать цепочку обещаний на стороне контроллера, но, как вы пожелаете –
Хорошо, спасибо за ваш ответ. Ошибка в вашем коде: Incomes.buildAndGetIncomes(). Then (function (d) {} – enguerranws