¡Esta es una revisión vieja del documento!
Una “promesa” o también llamada “futuro” es un objeto que actúa como proxy en los casos en los que no se puede retornar el verdadero valor ya que aun no se conoce pero no se puede bloquear la función esperando a que llegue.
Voy a volver a explicarlo pero con un ejemplo:
Al hacer una llamada Ajax con $http, la llamada a $http
no retorna ningún valor ya que aun no tiene dicho valor pero tampoco se puede bloquear esperando a que llegue. Pues realmente el servicio $http
si que retorna un valor. Esto que retorna es una promesas y como hemos dicho la promesa es un proxy que en un futuro contendrá el valor.
Explicado con un ejemplo es cuando hacemos una llamada http, como no podemos retornar el resultado de la llamada ya que
Ejemplo sin promesas:
$scope.importeTotal = 0; $scope.mensajeFinal = ""; $http({method: 'GET',url: 'fichero1.json'}).success(function(data, status, headers, config) { $scope.importeTotal = $scope.importeTotal + data.importe; $http({method: 'GET',url: 'fichero2.json'}).success(function(data, status, headers, config) { $scope.importeTotal = $scope.importeTotal + data.importe; $http({method: 'GET',url: 'fichero3.json'}).success(function(data, status, headers, config) { $scope.importeTotal = $scope.importeTotal + data.importe; $http({method: 'GET',url: 'fichero4.json'}).success(function(data, status, headers, config) { $scope.importeTotal = $scope.importeTotal + data.importe; $scope.mensajeFinal = "Ya hemos finalizado la lista de cálculos"; }); }); }); });
Ejemplo con promesas
$scope.importeTotalPromesas = 0; $scope.mensajeFinalPromesas=""; $http({ method: 'GET',url: 'fichero1.json'}).then(function(resultado) { $scope.importeTotalPromesas = $scope.importeTotalPromesas + resultado.data.importe; return $http({method: 'GET',url: 'fichero2.json'}) }).then(function(resultado) { $scope.importeTotalPromesas = $scope.importeTotalPromesas + resultado.data.importe; return $http({method: 'GET',url: 'fichero3.json'}) }).then(function(resultado) { $scope.importeTotalPromesas = $scope.importeTotalPromesas + resultado.data.importe; return $http({method: 'GET',url: 'fichero4.json'}) }).then(function(resultado) { $scope.importeTotalPromesas = $scope.importeTotalPromesas + resultado.data.importe; $scope.mensajeFinalPromesas = "Ya hemos finalizado la lista de cálculos con promesas"; })