JSFiddle - React, Tailwind, and code Playground

by pavel_krupala

HTML

<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://backbonejs.org/backbone-min.js"></script>

JavaScript

function Batch(options) {
    this.initialize(options);
};
_.extend(Batch.prototype, {
    _name: "--unknown batch name--",
    _steps: 0,
    _total_steps: 0,
    _callbacks: [],
    
    initialize: function(options) {
        console.log('Batch::initialize','options', options);
        this._name = options.name;
        this._steps = 0;
        this._total_steps = options.steps;
        this._callbacks = options.callbacks
    },
    addStep: function(msg) {
        this._steps++;
        console.log("<"+this._name+"> "+this._steps+"/"+this._total_steps+" update message: " + msg);
        if (this._steps > this._total_steps) {
            console.log("<"+this._name+"> Error - you added too much steps to this batch");
        }
        if (this.isDone()) {
            while (!_.isEmpty(this._callbacks)) {
                var func = this._callbacks.shift();
                
                if (!_.isUndefined(func)) {
                    console.log('<'+this._name+'>'+ ' -- executing callback:', func);
                    func.call();
                }
            }
        }
    },
    isDone: function() {
        return (this._steps == this._total_steps);
    }
});
        
var a = new Batch({
    name: 'test1',
    steps: 3,
    callbacks: [
        function() {
            console.log('callback1');            
        },
        function() {
            console.log('callback2');
        }
    ]
});
        

console.log(a);
        
        
a.addStep();
a.addStep();
a.addStep();
a.addStep();