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...