Material‎ > ‎Software‎ > ‎Angular 1.x con ES6‎ > ‎

Promises (ES6)

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((resolve, reject) => {
setTimeout(() => {
if (okToGreet(name)) {
resolve('Hello, ' + name + '!')
} else {
reject('Greeting ' + name + ' is not allowed.')
}
}, 1000)
})
}

const promise = asyncGreet('Robin Hood')
promise.then((greeting) => {
alert('Success: ' + greeting)
}, (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

Comments