作業中のプロジェクトで非同期呼び出しの順序付けの問題を解決する簡単なソリューションを作成しようとしています。
私が見つけた最善の解決策は次のとおりです。前提条件が満たされているかどうかを確認するイベントを添付します。実行されている場合は、イベントリスナーを削除して関数を実行します。
各関数は、イベントが完了するとイベントを呼び出します。そうすれば、誰もが実行できるようになるまで待機します。
これはコードです:
$(function() {
$(document).on('bmadone',function() {
if(beepmeapp.done_arr['fb-init']){
$(document).off('bmadone','#bma-root',this);
getBMAUserRoutes();
}
});
});
(テスト用の)関数はそれを実行しています:
function getBMAUserRoutes(){
$.ajax({
url : '/bma/users/fb',
type : 'GET',
data : {
access_token: 'abc'
},
success : function( data ) {
console.log('getBMAUser: success');
beepmeapp.done_arr['user-init'] = true;
$('#bma-root').trigger('bmadone');
},
error : function( xhr, err ) {
console.log('getBMAUser: error');
}
});
}
それはうまく機能しますが、私が抱えている問題は、それが決して終わらないループに入ることです。理由はわかりませんが、次のようになります。
$(document).off('bmadone','#bma-root',this);
リスナーを削除しません...
私はJS/Jqueryとこのクライアントサイド開発のすべての真の初心者なので、おそらく基本的なものが欠けていると思います。