jQuery.Deferred

by mifeng

HTML

<button id="toggle-state">Online</button>
<button id="perform-action">Perform Action</button>

<div id="result">
</div>

JavaScript

$(function() {
   
    var $result = $("#result"),
        dtd = $.Deferred(),
        isOnline = true;
    
    $("#toggle-state").on("click", function() {
        isOnline = !isOnline;
        
        $(this).html(isOnline ? "Online" : "Offline");
        
        dtd = $.Deferred();
        dtd.resolve(isOnline);
    });
    
    $("#perform-action").on("click", action);
    
    function checkState() {
        return dtd.promise();
    }
    
    function action() {
        $.when(checkState()).done(function(state) {
            $result.append((state ? "ON" : "OFF") + "LINE<br/>");
        });
    }
                            
    action();
    
});