jQuery Deferral Example

by klenwell

JavaScript

function AWorkOfStaggeringGenius() {
    var self = {};
    self.ready_as_promised = null;
    
    self.init = function() {
        self.ready_as_promised = new jQuery.Deferred();
        self.delayed_init();
    };
    
    self.delayed_init = function() {
        setTimeout(function() {
            console.log("now I'm ready");
            self.ready_as_promised.resolve();
        }, 2000);
        return self;
    };
    
    self.start = function() {
        console.log('start: will start when ready:', self.ready_as_promised.state());
        
        self.ready_as_promised.done(function() {
            console.log('starting now!');
        });
        
        return self;
    };
    
    self.init();
    return self;
};

function GeniusHandler() {
    var self = {};
    self.genius = null;
    
    self.init = function() {
        self.genius = new AWorkOfStaggeringGenius();
    };
    
    self.start_work = function() {
        self.genius.start();
    };
    
    self.init();
    return self;
}

var work = new AWorkOfStaggeringGenius();
work.start();

var handler = new GeniusHandler();
handler.start_work();