I want to call a javascript function that takes a long time (5 seconds) to finish without freezing my client's browser. They click the button to start the operation, then they should be notified when it finishes. Currently I have written something like
$(document).ready(function(){
    $('#tokenbutton').click(function(){
        // IMMEDIATE EFFECT
        $('#tokenbutton').attr("disabled",true).val("Computing...");
        var callback = function(resultsFromExpensiveOperation){
            // CALLBACK EFFECTS
            $('#tokenbutton').val("Token computed");
            $('#submitbutton').attr("disabled",false);
            // ...
        };                  
        // FREEZES BROWSER
        doExpensiveOperation(callback);
    });
});
and
doExpensiveOperation = function(callback){
    // ...
    //var results = ...
    callback(results);
};
but this freezes my browser when I run it. How can I change it so this doesn't freeze my browser?
 
     
    