Promises

Objetivo

Las promises permiten manejar pedidos asincrónicos de una manera más elegante que el manejo tradicional de callbacks.

Ejemplo

En la página que se muestra el servicio $http ya se vio la sintaxis que utilizan las promises, tomadas del framework $Q de Kris Kowal's. A continuación transcribimos un ejemplo de la página oficial de Angular:

// for the purpose of this example let's assume that variables `$q` and `okToGreet` // are available in the current lexical scope (they could have been injected or passed in). function asyncGreet(name) { // perform some asynchronous operation, resolve or reject the promise when appropriate. return $q(function(resolve, reject) { setTimeout(function() { if (okToGreet(name)) { resolve('Hello, ' + name + '!'); } else { reject('Greeting ' + name + ' is not allowed.'); } }, 1000); }); } var promise = asyncGreet('Robin Hood'); promise.then(function(greeting) { alert('Success: ' + greeting); }, function(reason) { alert('Failed: ' + reason); });

  • API Deferred, en el método asincrónico a ejecutar
    • se construye a partir del objeto $q inyectado en el constructor del componente donde se utilice
    • se pueden disparar básicamente dos eventos
      • resolve: indica que la llamada se completó ok
      • reject: rechaza la llamada y termina invocando el callback por error
  • API Promise, del lado de quien realiza la llamada asincrónica
    • se construye a partir de la instrucción deferred.promise (última línea del método que hace la llamada al server)
    • El cliente hace la llamada a la promesa (método asincrónico) y mediante el mensaje then le indica
      • el primer callback que indica qué debe hacer en caso de completarse exitosamente la promesa
      • y opcionalmente el callback que maneja los errores

Es posible encadenar n promises, lo importante es no olvidar que el último parámetro del mensaje then debe incluir el manejo de error general.

Links relacionados