JSFiddle - React, Tailwind, and code Playground

by gurkavcu

JavaScript

function Queue() { 
    var value = null,
        self = this,
        waiting = false,
        pauseFlag = false,
       _array = [];
    
    self.add = function(defered, value) {
        if(value !== undefined ) {
            _array.push({d : defered , v: value , type: 'defered'});           
        } else {
            _array.push({v: defered , type: 'absolute'});       
        }      
    }
    
    self.process = function() {
        while(_array.length > 0 && !waiting) {
            var obj = _array[0];
            _array = _array.slice(1,_array.length);
            if(obj['type'] === 'defered') {
                waiting = true;
                obj['d'].done(function(){
                    value = obj['v'];
                    waiting = false;
                });
            }
            else {
                value = obj['v'];
            }
        }
        if(!pauseFlag)
            setTimeout(self.process , 1000);
    }
    
    self.get = function() {
        return value;
    }
    
    self.pause = function() {
       pauseFlag = true;
    }
    
    self.resume = function() {
       pauseFlag = false;
       self.process(); 
    }
    
    self.process();
}

var q = new Queue();

// Log current value of Queue every 1 second
setInterval(function(){
    console.log(q.get());
},1000);

// Simulate ajax request
var defered = jQuery.Deferred();

// Add values 
q.add(defered,'undefined');
q.add(12);

// Resolve ajax request after 7 second
setTimeout(function(){defered.resolve();},7000);