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>