Classy Blank
by gschutz
HTML
<script src="https://rawgit.com/lodash/lodash/3.10.1/lodash.js"></script>
<script src="https://rawgit.com/GSchutz/classy.js/master/src/classy.js"></script>
<script src="https://rawgit.com/kriskowal/q/v1.0.1/q.js"></script>
function check() {
console.log('lops');
if (Room.$data().length) {
clearInterval(Room.$sid);
Room.sweep();
}
}
clearInterval(Room.$sid);
Room.$sid = setInterval(check, 200);
JavaScript
var i = 0;
var Room = Classy('myClass');
Room.InProgress = false;
Room.sweep = function() {
var first = Room.$first();
if (first && first.promise) {
Room.InProgress = true;
first.promise.call().then(function() {
first.$remove();
Room.sweep();
});
} else {
Room.InProgress = false;
}
};
console.log('start');
Room.queue = function(fn) {
Room.$add({promise: fn});
if (!Room.InProgress)
Room.sweep();
return this;
};
function hackPromise(fn, t) {
setTimeout(fn, t || (_.random(1,5) * 300));
}
Room.queue(function() {
var q = Q.defer();
hackPromise(function() {
q.resolve(true);
console.log(1);
}, 0);
return q.promise;
});
Room.queue(function() {
var q = Q.defer();
hackPromise(function() {
q.resolve(true);
console.log(2);
}, 0);
return q.promise;
});
Room.queue(function() {
var q = Q.defer();
hackPromise(function() {
q.resolve(true);
console.log(3);
}, 1);
return q.promise;
});
setTimeout(function() {
Room.queue(function() {
var q = Q.defer();
hackPromise(function() {
q.resolve(true);
console.log(4);
}, 1);
return q.promise;
});
}, 100);