2011-10-28 11 views
1

私のアプリが読み込み中に動作するのに大きな問題があります。私はそれが非常に公平であるとは思わないユーザーには、彼らは、読み込みが終了し、準備ができて/応答するまで、彼らは、アプリケーションへのアクセスを許可する。順次関数javascript

注:他のすべてのものは私のアプリでうまく動作します。私は関数を順番に実行することができません。

function LOADINGapp(){ 
    //app loads but allows user to enter before loading is finished 
    $.when(getToday()).then(reorderdivs()).then(getSomething()).then(setupSomethingElse()).then(loadAnotherSomething()).then(INITapp()); 

    //app stops dead at getToday but (Crome javascript console) no errors 
    getToday(function(){reorderdivs(function(){getSomething(function(){setupSomethingElse(function(){loadAnotherSomething(function(){INITapp();});});});});}); 

    //app loads but allows user to enter before loading is finished 
    getToday(reorderdivs(),getSomething(),setupSomethingElse(),loadAnotherSomething(),INITapp()); 

    //getToday(); 
    //reorderdivs(); 
    //getSomething(); 
    //setupSomethingElse(); 
    //loadAnotherSomething(); 
    //INITapp(); 
    } 
function INITapp(){ 
    $('#SPLASH').hide(); 
    } 

誰かが私を助けてくれますか、分かりません。これを実行するための研究をやり遂げてください。

ありがとうございます。

答えて

1

私は(一度に一つのことを行うには唯一の私LOADINGapp機能を許可する)ジャンプして、それを解決したので、それは段階的に動作します。ステージ(関数)が完成すると、LOADINGapp関数にジャンプします。

var L=0; 

function LOADINGapp(){ 
    if(L==0){getToday();} 
    else if(L==1){reorderdivs();} 
    else if(L==2){getSomething();} 
    else if(L==3){setupSomethingElse();} 
    else if(L==4){loadAnotherSomething();} 
    else if(L==5){INITapp();}; 
    } 
function INITapp(){ 
    $('#SPLASH').hide(); 
    } 

例:

function getSomething(){ 
    //app suff 
    //app suff 
    //app suff 
    L = 3; 
    LOADINGapp(); 
    } 

私が改善されるだけの事は++だけでLを行うことです。 LOADINGappの終わりに、どこにでも書き込むことができます。 PS:努力してくれた皆さん、ありがとう

0

おそらく非同期関数と関係します。だから、ここで述べたように、コールバックを使ってこれらの関数を試すことができます:http://pietschsoft.com/post/2008/02/JavaScript-Function-Tips-and-Tricks.aspx

+0

私はcallback()やloadAnotherSomething()の使用に違いはありません、間違っていますか? –

+0

@BenMuircroft - あなたがする必要があるのは、loadAnotherSomething()などのコールバックパラメータを追加することです。 – comp500

2

私はjqueryからwhen/thenを使用しませんでしたが、メソッドへのポインタを渡す必要があるようです。今すぐあなたはそれらを一度にすべて実行しています。試してみてください:

$.when(getToday()) 
.then(reorderdivs) 
.then(getSomething) 
.then(setupSomethingElse) 
.then(loadAnotherSomething) 
.then(INITapp); 

JSの唯一の真の非同期オブジェクトは、AJAX呼び出しで認識すること、また

を(行方不明括弧に注意してください)。 setTimeoutは非同期ではなく、キューイングのメソッドです。ジョンResig氏の記事を読む:

http://ejohn.org/blog/how-javascript-timers-work/

+0

これはエラーは発生しませんが、ロード前のユーザーは終了できます。 –

+0

私は火かき棒であなたのコードを進めることをお勧めします。あなたの関数にブレークポイントを置き、それらがいつ実行されるかを見てください。または、ビジネスロジックを実装する前に、より簡単なデモを試してフローを理解してください。 – MorganTiley

+0

また、when/thenメソッドを使用する特定の理由はありますか?ドキュメントを読んだら、彼らはajaxの呼び出しを処理するために多くのことを思っています。 – MorganTiley