Fluent Async Interface - v1

by Julien Roche

HTML

<ol></ol>

JavaScript 1.7

const olElement = document.querySelector('ol');

function promiseTimeout() {
	return new Promise((resolve) => {
  	setTimeout(resolve, 500 + Math.round(Math.random() * 1000));
  });
}

function log(msg) {
	const liElement = document.createElement('li');
  liElement.textContent = msg;
  olElement.appendChild(liElement);
}

class MyApi {
	init() {
  	return promiseTimeout()
    	.then(() => log('init done'));
  }
  
  add(value) {
  	return promiseTimeout()
    	.then(() => log(`add done for ${value}`));
  }
  
  remove(value) {
  	return promiseTimeout()
    	.then(() => log(`remove done for ${value}`));
  }
  
  destroy() {
  	return promiseTimeout()
    	.then(() => log('destroy done'));
  }
}

setTimeout(() => {
	const myApi = new MyApi();
  
  myApi
  	.init()
    .then(() => myApi.add(42))
    .then(() => myApi.add(55))
    .then(() => myApi.remove(42))
    .then(() => myApi.destroy())
    .catch((err) => alert(`Error: ${err}`))
  ;

}, 1000);