Promises + Generators

solves both problems: 1) sequencing of async request 2) Inversion of control

by bhupendra negi

JavaScript

function getAjaxData(str, resolve, delay = 1000) {
  console.log("requesting via Promise..." + str);
  setTimeout(() => resolve(str), delay);
}

function makePromise(str, delay) {
  return new Promise((resolve, reject) => {
    getAjaxData(str, resolve, delay)
  })
}

function* gen() {
  // requesting in parallel
  var p1 = makePromise('Hello', 500);
  var p2 = makePromise('Bye !!', 10000);


  p2.then((data) => myiterator.next(data))
  p1.then((data) => myiterator.next(data))

  var x = (yield p1);
  console.log(x);
  
  var y = (yield p2);
  console.log(y);

  // yield will pause the js execution

}

var myiterator = gen();
// to start the generator function do this
myiterator.next();
// now further resuming the generator will be done by setTimeout/ajax / asynnc task