Using Promises with a For Loop

Using Promises with a For Loop

by alexbfree

Babel + JSX

//NB These timeouts are not really proper promises, because they are asynchronous. So i had to fudge it with the timeouts. Need to properly simulate a pause t

let tasks = [];

let con1 = new Promise( (resolve,reject) => {
  setTimeout(() => {
    resolve('connected db 1');
  }, 2000);
});

let con2 = new Promise( (resolve,reject) => {
  setTimeout(() => {
    resolve('connected db 2');
  }, 2000);
});

let tables = ["t1","t2","t3","t4","t5"];

Promise.all([con1,con2]).then(values => {
   console.log(values); 
   for(let t in tables) {
     let table = tables[t];
     let task = new Promise((resolve, reject) => {
       setTimeout(() => {
         resolve("finished query on "+table);
       }, 2000); //timeout from start
     });
     tasks.push(task);  
   }

   let end1 = new Promise( (resolve,reject) => {
     (function (rs,rj) {
       return setTimeout(() => {
         rs("disconnected db 1");
       }, 7000); //timeout from post-connection
     })(resolve,reject);
   });

  let end2 = new Promise( (resolve,reject) => {
    (function (rs,rj) {
      return setTimeout(() => {
        rs("disconnected db 2");
  	  }, 5000); //timeout from post-connection
    })(resolve,reject);});

  Promise.all(tasks).then(values => {
    console.log(values); 
    Promise.all([end1,end2]).then(values => {
      console.log(values);
    });
  });
});