¿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/

Jesus Rosas
Web Developer && CEO de Eco Technologic, apasionado por la tecnología, blogs , emprendimiento y la buena comida.

Últimos artículos

Una nueva funcionalidad de Microsoft 365 es el mayor sistema de vigilancia en nuestro trabajo

Una nueva funcionalidad de Microsoft 365 es el "mayor sistema de vigilancia en el puesto de trabajo" según el fundador de Basecamp David Heinemeier Hansson,...

Arrancar una PC desde un disco de vinilo es una locura posible

Los discos de vinilo ha resurgido como soporte físico para disfrutar de la música, pero parece que a alguien se le ha ocurrido ir...

La NASA empieza a probar sus nuevos trajes espaciales para sus próximas misiones tripuladas a la Luna.

Los astronautas de la NASA han comenzado a probar sus nuevos trajes espaciales, que la agencia espacial planea usar para sus próximas misiones tripuladas...

El ejército de EE. UU. Desarrolló gafas de realidad aumentada para perros.

El Ejército de los EE. UU. Está desarrollando gafas de realidad aumentada para perros con el fin de ayudar a proteger a sus guardianes...
a

Publicasciones relaciodadas