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

3 жауаптар

Мен бұрын/кейін jquery-дан пайдаланбағанмен, көрсеткішті әдістерге өту керек сияқты. Сіз дәл қазір бірден оларды орындап жатырсыз. Тырысу:

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

(Жетіспейтін жақшаға назар аударыңыз)

Сондай-ақ, JS-дегі шынайы асинхронды нысанды AJAX қоңырауы деп білу керек. setTimeout асинхронды емес, бұл кезек әдісі. Джон Резигтің постын оқыңыз:

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

2
қосылды
бұл қате жасамайды, бірақ жүктеу алдында пайдаланушыға мүмкіндік береді.
қосылды автор Ben Muircroft, көзі
Мен сіздің кодының өрт сөндіргіші арқылы өтуін ұсынамын. тоқтау нүктелерін өзіңіздің функцияларыңызға қойыңыз және олардың орындалуын көріңіз. Немесе бизнес логикасын іске асырудан бұрын ағынды түсіну үшін қарапайым демонстрацияны қолданыңыз.
қосылды автор MorganTiley, көзі
Сондай-ақ - қашан/кейін әдістерді қолданудың ерекше себебі бар ма? Құжаттарды оқып болғаннан кейін олар ajax қоңырауларын өңдеу үшін көп көрінеді.
қосылды автор MorganTiley, көзі

Мен оны секіру арқылы шешдім (тек 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 ++; LOADINGAP соңында оны барлық жерде жазады. PS: жігіттерге алғыс айтамыз

1
қосылды

Бұл асинхронды функциялармен байланысты болуы мүмкін. Сондықтан сіз осы функцияларды кері байланыспен жасауға тырысыңыз, бұл жерде айтылғандай: http://pietschsoft.com/post/2008/02/JavaScript-Function-Tips-and-Tricks.aspx .

0
қосылды
Мен callback() немесе loadAnotherSomething() функциясында ешқандай айырмашылық жоқ, мен дұрыс емес пе?
қосылды автор Ben Muircroft, көзі
@BenMuircroft - Не істеу керек - loadAnotherSomething() және т.б. үшін кері шақыру параметрін қосу
қосылды автор comp500, көзі