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);