Para acabar esta unidad vamos a seguir con el ejemplo del seguro médico y vamos a modificar el servicio remoteResource
para que ahora haga uso de las promesas y los controladores que lo usan para adecuarse al nuevo interfaz del servicio.
El cambio implica que en los métodos get
y list
ya no se pasen como parámetros las funciones de callback sino que ahora se retorna una promesa y desde los controladores se añaden a la promesa las funciones de callback.
Veamos cómo queda la función del servicio.
function RemoteResource($http,$q, baseUrl) { this.get = function() { var defered=$q.defer(); var promise=defered.promise; $http({ method: 'GET', url: baseUrl + '/datos.json' }).success(function(data, status, headers, config) { defered.resolve(data); }).error(function(data, status, headers, config) { defered.reject(status); }); return promise; } this.list = function() { var defered=$q.defer(); var promise=defered.promise; $http({ method: 'GET', url: baseUrl + '/listado_seguros.json' }).success(function(data, status, headers, config) { defered.resolve(data); }).error(function(data, status, headers, config) { defered.reject(status); }); return promise; } }
$q
.defered
status
ya que era lo único que se usaba.get
son en el list
.Ahora veamos cómo se crea el provider.
function RemoteResourceProvider() { var _baseUrl; this.setBaseUrl = function(baseUrl) { _baseUrl = baseUrl; } this.$get = ['$http','$q',function($http,$q) { return new RemoteResource($http,$q, _baseUrl); }]; }
$q
.$q
.
Ahora modificamos los controladores DetalleSeguroController
y ListadoSeguroController
para que hagan las llamadas al servicio usando las promesas.
remoteResource.get().then(function(seguro) { $scope.seguro = seguro; }, function(status) { alert("Ha fallado la petición. Estado HTTP:" + status); });
remoteResource.list().then(function(seguros) { $scope.seguros = seguros; }, function(status) { alert("Ha fallado la petición. Estado HTTP:" + status); });
El cambio en ambos controladores es sólo en las llamadas a get
y list
para que hagan uso del método then
en vez de pasar directamente las funciones de callback al llamar a get
y list
.
Lo único que hemos modificado es el fichero script.js
con los cambios que hemos indicado.
Después de ver tantos aspectos de las promesas vemos que crear servicios que usen promesas es muy sencillo y permite que dichos servicios puedan ser usados de formas mucho más complejas gracias a todas las utilidades que ofrecen las promesas.