我从控制器调用工厂内的服务。然后该服务调用另一个服务,该服务为某些json发出$ http请求。然后,第一个服务需要修改json中的数据并将其返回给控制器。我无法弄清楚如何将数据恢复到控制器。我收到错误'无法读取属性'然后'未定义的'关于我在我的控制器里面的$ scope.getModifiedData函数中使用then()。控制器确实知道了employeesFactory.modifyData()服务,因为如果我删除promise和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;
});
};
答案 0 :(得分:1)
只需更换它。
service.modifyData = function() {
var deferred = $q.defer();
service.employeesRawData()
.then(function(employeesRaw) {
...
return deferred.promise;
});
};
在
service.modifyData = function() {
var deferred = $q.defer();
service.employeesRawData()
.then(function(employeesRaw) {
...
});
return deferred.promise;
};