JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://underscorejs.org/underscore.js"></script>

JavaScript

function executePromiseQueueSync(queue, beacon){
    var seed = $.Deferred(),
        le = queue.length,
        last;
    beacon.notify(0);
    last = _.reduce(queue, function(memo, ent, ind){
       var df = $.Deferred();
        df.then(function(){
            console.log("DBG proggie");
            beacon.notify((ind+1)/le*100);
        });
        df.progress(function(pct){
            beacon.notify((ind+1)/le*100 - (100-pct)/le );
        });
        console.log("DBG hook funk "+ind);
        memo.then(function(){
          console.log("DBG exec func "+ind);
          var dff = ent.funct.apply(null, ent.argmnt);
          if (dff && dff.done) { // jic ducking
                // func returnes a deferred, she will notify us
                dff.done(df.resolve)
                   .progress(df.notify);
          }
          else {
              df.resolve();
          }
        });

        return df.promise();
    }, seed.promise());
    last.then(function(){
        beacon.resolve(100)
    });
    seed.resolve(); // trigger
    
    return beacon.promise();
}

function x(){
    // do stuff
    console.log("blah");
}

function y(){
    var df =  $.Deferred();
    // do a log deferred proccess
    function setProgF(topct){
        return function(){
            df.notify(topct);
        }
    }
    setTimeout(setProgF(10),300);
    setTimeout(setProgF(30),600);
    setTimeout(setProgF(50),900);
    setTimeout(setProgF(60),1200);
    setTimeout(setProgF(70),1400);
    setTimeout(setProgF(90),1700);
    setTimeout(function(){
        setProgF(100);
        console.log("DBG Job done");
        df.resolve();
    }  ,1900);
    return df.promise();
}

var promisesQueue = [],
     beacon = $.Deferred(); 

promisesQueue.push({funct: x, argmnt:[]});
promisesQueue.push({funct: y, argmnt:[]});
promisesQueue.push({funct: x, argmnt:[]});
promisesQueue.push({funct: y, argmnt:[]});

function monTheProg(pct) 
{
    console.log('progress '+pct.toString(10,2));
}

// first...