2011-10-28 69 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