2011-10-28 65 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(); 
    } 

我會改善的唯一的事情就是做大號++;在LOADINGapp結束時,因爲它節省了寫在所有的地方。 PS:謝謝你們的努力

2

我還沒有使用/然後從jquery之前,但它看起來像你需要傳遞指針的方法。現在你實際上一次都在執行它們。嘗試:

$.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