Skip to content

WebReflection/esimorp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Esimorp Build Status Coverage Status

Inside Out Promises.

The simplest, yet handy, resolvable and rejectable Promises for all developers use cases.

// The constructor callback is optional.
// If provided, it's exactly the same
// that you would pass to a new Promise.
const promise = new Esimorp();

// you can already use the instance
// just like any other Promise
promise
  .then(console.log)
  .catch(console.error);

// ... and whenever it happens ...
promise.resolve('kudos');

F.A.Q.

  • can I promise.then().resolve() ? Nope, only the initial resolvable creator/owner can resolve it. No side effects at distance.
  • can I safely pass around a promise.then() ? Absolutely, that just creates a new Promise copy that's not resolvable.
  • how can I abort an operation ? It's up to you, but following there is an example.
function fetchy(url) {

  const p = new Esimorp();
  const xhr = new XMLHttpRequest();

  // derive from Esimorp
  // to avoid external resolution
  const out = p.then();
  // expose only abort, delegating to xhr
  out.abort = xhr.abort.bind(xhr);

  // resolve indirectly out through Esimorp p
  xhr.addEventListener('abort', e => p.reject(e));
  xhr.addEventListener('error', e => p.reject(e));
  xhr.addEventListener('load', e => p.resolve(xhr));

  // perform the operation
  xhr.open('get', url);
  xhr.send();

  // return the Promise with abort delegate
  return out;
}
  • what else could I do with this ? You could create Promises with a timeout and resolve or reject them before.
const p = new Esimorp((res, rej) => {
  // reject in 5 seconds
  setTimeout(rej, 5000, 'timeout');
});

// but if resolved or rejected first is OK
setTimeout(() => p.resolve('OK'), 1000);

License

(C) 2017 Andrea Giammarchi, @WebReflection, MIT Style License.