Я вызываю службу внутри фабрики с контроллера. Затем служба вызывает другую службу, которая делает запрос $http для некоторого json. Затем первой службе необходимо изменить данные из json и вернуть их контроллеру. Я не могу понять, как вернуть данные в контроллер. Я получаю сообщение об ошибке «Невозможно прочитать свойство «тогда» неопределенного» о моем использовании then() внутри функции $scope.getModifiedData внутри моего контроллера. Контроллер знает о сервисе employeeFactory.modifyData(), потому что, если я удалю обещание и функциональность then(), он будет успешно вызван.
Я смотрел на это: https://docs.angularjs.org/api/ng/service/$q
Внутри моего контроллера:
$scope.getModifiedData = function() {
var promise = employeesFactory.modifyData();
promise.then(function(modifiedData) {
console.log(modifiedData, 'modifiedData');
});
};
$scope.getModifiedData();
Внутри моей фабрики:
var targetEmployeesAPI = 'http://sample.dev/api/employees.jsonp?callback=JSON_CALLBACK';
service.employeesRawData = function() {
var deferred = $q.defer();
$http({
method: 'JSONP',
url: targetEmployeesAPI
}).success(function(data) {
employeesRaw = data.employees;
deferred.resolve(employeesRaw);
}).error(function() {
deferred.reject();
});
return deferred.promise;
};
service.modifyData = function() {
var deferred = $q.defer();
service.employeesRawData()
.then(function(employeesRaw) {
// Do stuff: Modify data from service.employeesRawData()
// Eventually create object modifiedData
modifiedData = {};
if (modifiedData !== undefined) {
deferred.resolve(modifiedData);
} else {
deferred.reject('Rejected');
}
return deferred.promise;
});
};