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>