Javascript: promesas

Posted by in Javascript y TypeScript

Desde hace unos meses, las promesas de Javascript es una de esas características que tengo pendiente de incluir en mi repertorio de programación con TypeScript, fundamentalmente porque Javascript es un lenguaje que me ha costado mucho entender cómo funciona, y más cuando trabajas con AJAX. Las promesas viene para quedarse, con la intención de que los desarrolladores escriban mejor código!

Qué es AJAX

Son un conjunto de técnicas que permiten intercambiar información con un servidor sin necesidad de recargar la página. Bueno, esto así explicado, es un poco breve, pero si estás interesado en conocer con más profundidad, aquí te dejo este libro: http://librosweb.es/libro/ajax/capitulo_1.html, que fue el que me leí hace ya unos cuantos años para comprender qué se esconde detrás. Por supuesto, aprender a realizar peticiones AJAX me llevó mi tiempo, perfeccionado con mis propias funciones, hasta que aparece jQuery y te das cuenta de que otros ya han pensado lo mismo que tú, e incluso mejor programado.

jQuery apareció en mi vida profesional para liberarme de la tensión que suponía no entender (bueno, aún me cuesta) cómo funciona Javascript, y los callbacks:

Los callbacks son las funciones que se ejecutan cuando terminan otras.

Total, que al final empiezas a encadenar callbacks tras callbacks, y el cacao del código Javascript se convierte en una madeja indescifrable. Aquí lo explican muy bien y muy clarito, dejando constancia de que no son asíncronos.

Con el paso del tiempo, de los proyectos, y por supuesto, de jQuery, he aprendido mucho Javascript, a trompicones, hasta que he terminado migrando a TypeScript (TS) (es decir, que ya no programo Javascript, sino Typescript que acaba compilado en Javascript, JS). Y este cambio me ha producido un nuevo salto en el conocimiento de Javascript, sobre todo porque con TS la sintáxis respecto a la creación de variables y objetos es más estricta (menos permisivo que JS).

Javascript: Promesas

El hecho de trabajar con aplicaciones de una sola página (single page applications) hace que conocer AJAX, jQuery y callbacks sea fundamental para mejorar la eficiencia y el rendimiento de las aplicaciones, sobre todo ahora que disponemos de tan buenos navegadores (tanto para navegar cómo para programar). Y para ordenar las ideas, aparecen las promesas de Javascript (aparecen en ECMAScript 2015, o sea, ES6):

El objeto Promise se usa para computaciones diferidas o asíncronas, y pueden estar en uno de los siguientes 4 estados: pendiente, cumplida, rechazada o arreglada (no está pendiente).

Para comprender con más detalle la sintáxis de Promises, qué mejor que la documentación: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise (y aquí en español).

La principal razón para usar promesas es el manejo de errores, pues las promesas, o se cumplen o se incumplen (no hay más opciones!) y según suceda, así se ejecutará un código u otro. Esto es clave para el mejor desarrollo de aplicaciones con Javascript (o TS, en mi caso), porque los callbacks pueden depender de múltiples factores que quizás no todos controlemos (por ejemplo, si llamamos a una API que no es nuestra), o si una callback llama a otra callback, y ésta a una tercera, y así sucesivamente.

La segunda razón de empeñarme en utilizar las promesas de JS es para mejorar la depuración de código, tanto cuando sucede lo esperado como cuando no sucede.

La tercera razón es el manejo de encadenamiento de promesas, cosa bastante habitual en JS o TS.

Si después de esto no te convence esto de las promesas, …. mejor que hagas el curso que indico un poco más abajo.

Sintaxis de las promesas

La sintaxis no es muy complicada:

new Promise(function (resolve, reject) {
  var value = dosomething();
 if (condition) { resolve(value);   }
else {  reject(value);  }
} )
.then(function (value){
  // executed
})
<pre>.catch(function (value){
 // fails
})

No muy complicada para todos los beneficios que os he contado.

Curso de Promesas en Javascript

Por último, no queria dejar de mencionar un curso que he hecho sobre esta característica Promises in javascript que encontrareis en udacity.com.

Un saludo y happy coding.

Google+ Comments - Comentarios Google+