EcmaScript 6

¿Echas de menos los Deferred de jQuery cuando trabajas con promesas en JavaScript? Pues bien, acabo de publicar una utilidad con un código muy pequeño (32 líneas), con la que puedes trabajar con las promesas de JavaScript, tal y como lo hacías con los Deferred. La mini-librería se llama Repromise.

Me explico. Su funcionamiento es muy básico. Si hasta ahora al construir las promesas de JavaScript, tenías que definir un callback, con el que recibir los métodos a los que llamar al resolver y rechazar la promesa. Pongamos un ejemplo de como sería un código más o menos realista con promesas:

function findUserByName(userName) {
  const promise = new Promise1
    .catch(onStoreFindByNameRejected.bind(this, repromise));

  return repromise.getPromise();
}

function onStoreFindByNameResolved(repromise, userResult) {
  const userParsed = this.parseUserResult(userResult);
  repromise.resolve(userParsed);
}

function onStoreFindByNameRejected(repromise, errorReason) {
  repromise.reject(errorReason);
}

Con el modo antiguo, no quedaba otra que pasar los dos parámetros, o crear un nuevo objeto uniendo ambos para pasarlos a otras funciones.

Para utilizar la librería tan sólo hay que importarla en vuestro proyecto con npm:

npm i jrepromise

Espero vuestras ideas y sugerencias para ir mejorando esta mini-librería, y que os pueda ayudar un poco a lidiar con las promesas.


  1. resolve, reject) => { userStore.findByName(userName).then((userResult) => { const userParsed = parseUserResult(userResult); resolve(userParsed); }.catch(function(errorReason) { reject(errorReason); }); } return promise; }

    Como podéis ver, la indentación se va incrementando haciendo poco legible el código. Con Repromise, creas una instancia de la clase, y cuando quieras resolver la promesa o rechazarla llamas al método correspondiente. Basándonos en el ejemplo anterior:

    function findUserByName(userName) {
      const repromise = new Repromise();
    
      userStore.findByName(userName).then((userResult) => {
        const userParsed = parseUserResult(userResult);
        repromise.resolve(userParsed);
      }.catch(function(errorReason) {
        repromise.reject(errorReason);
      });
    
      return repromise.getPromise();
    }

    Como podéis ver, simplifica un poco el código, evitando que tengamos un método en medio, y además, podemos pasar nuestro objeto Repromise a otros métodos para que sean éstos los que hagan las llamadas, así podemos simplificar aún más el método original:

    function findUserByName(userName) {
      const repromise = new Repromise();
    
      userStore.findByName(userName)
        .then(onStoreFindByNameResolved.bind(this, repromise 

Comparte este artículo con quien quieras
Nueva canción: The Spring is Comming
async y await: la magia del código asíncrono en JavaScript

Leave a Comment

Your email address will not be published. Required fields are marked *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.