JSFiddle - React, Tailwind, and code Playground
by blesh
JavaScript
//Timed queue
var noop = function () {};
function TimedQueue() {
var self = this;
var queue = self.$queue = [];
self.$running = false;
self.$next = function () {
self.$running = true;
if (queue.length > 0) {
return queue.shift()();
}
self.$running = false;
return noop();
};
self.unpause = function () {
console.log('unpause called');
if (self.$paused) {
self.$paused = false;
self.$next();
}
};
self.then = function (fn) {
var self = this;
self.$queue.push(function () {
fn.apply(self);
setTimeout(function () {
self.$next();
}, 0);
});
if (!self.$running && !self.$paused) {
self.$next();
}
return self;
};
self.wait = function (delay) {
var self = this;
self.$queue.push(function () {
setTimeout(function () {
self.$next();
}, delay);
});
return self;
};
self.pause = function () {
var self = this;
self.$queue.push(function () {
self.$paused = true;
});
return self;
};
}
TimedQueue.first = function () {
return new TimedQueue();
};
var i = 0;
function test() {
console.log(i++, new Date());
}
TimedQueue.first(test).then(test)
.then(test).wait(3000).then(test)
.then(function () {
var tq = this;
setTimeout(function () {
tq.unpause();
}, 4000);
})
.pause()
.then(function(){
console.log('done')
});