¿Que son las Promises en JavaScript y como funcionan?

promises

Uno de los problemas a los que nos enfrentábamos los desarrolladores de JavaScript era a la temida Pirámide de la Muerte ocasionada por varios callbacks, es por eso que tienes que conocer el concepto de las Promesas y cuál es su utilidad

promises-javascript

¿Qué es una Promesa o Promise?

La principal idea de esta nueva característica es que una Promesa o Promise es el resultado de una operación asíncrona, la cual se compone de 3 estados diferentes:

  • Pending: Es el estado inicial de la promesa
  • Fullfilled: Es el estado de una promesa representando una operación satisfactoria
  • Rejected: Es el estado de una promesa representando una operación fallida

Una vez que una promesa se cumple o se rechaza, es inmutable (es decir, que nunca puede cambiar de nuevo).

Casos de Uso

Supongamos que queremos construir un pequeño módulo que lee archivos de manera asíncrona, para lo cual tenemos el siguiente código

function readFile(filename, enc){
  return new Promise(function (fulfill, reject){
    fs.readFile(filename, enc, function (err, res){
      if (err) reject(err);
      else fulfill(res);
    });
  });
}

Usamos la declaración

new Promise();

para construir una nueva promesa, la cual recibe dos parámetros, el primero es para cuando la promesa se haya ejecutado correctamente y el segundo cuando se rechaza, cada vez que la promesa se cumple se ejecuta la función correspondiente inmediatamente

Existe un método del Objeto Promise que facilita más las cosas al momento de crear una Promesa y es

promise.done()

el cual recibe como parámetro la función que se ejecutará una vez que se haya cumplido dicha promesa creada. Por ejemplo:

function readJSON(filename){
  return new Promise(function (fulfill, reject){
    readFile(filename, 'utf8').done(function (res){
      try {
        fulfill(JSON.parse(res));
      } catch (ex) {
        reject(ex);
      }
    }, reject);
  });
}

Una de las cosas que se pueden hacer con las promesas es lograr transformarlas por medio de otra operación esta, puede ser asíncrona o síncrona en su defecto. Las promesas cuentan con su propio método para su trasformación y las operaciones de encadenamiento

Retomando el ejemplo anterior quedaría de la siguiente manera

function readJSON(filename){
  return readFile(filename, 'utf8').then(function (res){
    return JSON.parse(res)
  })
}

Ya que

JSON.parse()

es una función podremos reescrbirlo de la siguiente manera

function readJSON(filename){
  return readFile(filename, 'utf8').then(JSON.parse);
}

Como te darás cuenta hay muchas cosas que se pueden lograr con esta nueva característica de JavaScript, si quieres aprender más sobre este tema, puedes consultar la documentación oficial del proyecto.

http://es6-features.org/

Descargar este artículo en PDF

Lo sentimos, esta opción solo está disponible para los socios. Más información de nuestro grupo de socios.


Jesus Rosas on FacebookJesus Rosas on GithubJesus Rosas on InstagramJesus Rosas on TwitterJesus Rosas on Youtube
Jesus Rosas
Web Developer && CEO de Eco Technologic, apasionado por la tecnología, blogs , emprendimiento y la buena comida.

Déjanos un comentario: