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


¿Quieres aprender a programar de manera profesional?

 

Te invitamos a formar parte de Azul School donde vas a tener acceso a cursos profesionales con certificado. Además tienes acceso a una red social de programadores donde puedes conocer gente de tu ciudad o país.

 

Si quieres acceder a todas las funciones te regalamos un descuento del 75% usando este cupón (no vas a encontrar este descuento en ningún otro lugar) Cupón: azulweb y lo puedes cambiar aquí: Haz clic aquí para cambiar el cupón del 75%.

 

También puedes probar la plataforma de forma gratuita y obtener un curso gratuito aquí: Haz clic aquí para probar la plataforma de forma gratuita.


También te podría gustar...