我有一个我无法编辑的工厂:
factory('UsersForAnimale', ['$q', '$http',function($q, $http) {
var getUsers = function() {
var deferred = $q.defer();
$http.get('ServerRest/users-for-animale.php')
.success(function(data) {
deferred.resolve(data); // Successo: risolvo la promise
})
.error(function(reason) {
deferred.reject(reason); // Errore: rigetto la promise
});
return deferred.promise; // Restituisco una promise
}
return {
getUsers: getUsers
};
}]);
我创建了一项服务,因为我想尝试操纵结果:
.service('ContatoreUtentiAndPromise', ['UsersForAnimale',function(UsersForAnimale)
{
var Numero = 0;
this.getNumber = function()
{
UsersForAnimale.getUsers().then(function(data)
{
this.Numero = data.length;
console.log("Numero="+this.Numero);
this.Numero = this.Numero+10;
return this.Numero;
});
}
}]);
控制台显示正确的值但控制器没有显示任何内容。
.controller('ListaUtentiContaConSapInBoxCtrl', ['ContatoreUtentiAndPromise','$scope','$q', function (ContatoreUtentiAndPromise,$scope,$q)
{
$scope.numeroUtenti=ContatoreUtentiAndPromise.getNumber();
}]);
我想知道我错在哪里
答案 0 :(得分:1)
您应该从服务方法返回promise,因为factory方法是异步的:
this.getNumber = function() {
return UsersForAnimale.getUsers().then(function(data) {
this.Numero = data.length;
console.log("Numero="+this.Numero);
this.Numero = this.Numero+10;
return this.Numero;
});
}
然后以这种方式使用它:
ContatoreUtentiAndPromise.getNumber()
.then(function(num) {
$scope.numeroUtenti = num;
});