顺序函数javascript

时间:2011-10-28 16:31:58

标签: javascript function

我在加载时让我的应用运行起来遇到了很大的麻烦。我不认为用户允许他们访问应用程序是非常公平的,直到它完成加载并准备好/响应。

请注意:我的应用程序中的其他所有工作正常,我无法按顺序运行函数。

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();
    }

有人可以帮助我,我不明白。完成并做一个研究基调以使其表现出来。

由于

3 个答案:

答案 0 :(得分:2)

我之前没有使用过jquery,但看起来你需要将指针传递给方法。现在你实际上是一次性执行它们。尝试:

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

(注意缺少的括号)

另外,请注意JS中唯一真正的异步对象是AJAX调用。 setTimeout不是异步的,它是一种排队方法。阅读John Resig的帖子:

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

答案 1 :(得分: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:谢谢你们的努力

答案 2 :(得分:0)

这可能与异步函数有关。因此,您可以尝试使用回调来创建这些函数,如下所述:http://pietschsoft.com/post/2008/02/JavaScript-Function-Tips-and-Tricks.aspx