Edit in JSFiddle

var defer = $.Deferred()
    .resolve()
    .pipe( function() {
        return $.Deferred( function( defer ) {
            //すごい時間かかる初期化処理
            setTimeout( function() {
                $("#myresult").append($("<p>").text("initiaization is finished.") )
                defer.resolve();
            }, 5000 );                
        } )
        .promise()                    
    } );
            
$("#mytrigger").click( function() {
    //ユーザーがトリガを引いても初期化済みじゃないと実行できない処理
    defer.done( function() {
        $("#myresult").append($("<p>").text("fire!"));
    } );
} )
<button id="mytrigger">trigger</button>
<div id="myresult"></div>