последовательные функции JavaScript - PullRequest
1 голос
/ 28 октября 2011

У меня серьезные проблемы с работой приложения во время загрузки. Я не думаю, что пользователям будет справедливо разрешать им доступ к приложению, пока оно не загрузится и не будет готово / отзывчиво.

Обратите внимание: все остальное работает нормально в моем приложении. Я просто не могу заставить функции работать по порядку.

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 ]

2 голосов
/ 28 октября 2011

Я не использовал когда / то из jquery раньше, но похоже, что вам нужно передать указатели на методы. Прямо сейчас вы выполняете их все одновременно. Попробуйте:

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

(обратите внимание на пропущенные скобки)

Кроме того, учтите, что единственный истинный асинхронный объект в JS - это вызов AJAX. setTimeout НЕ является асинхронным, это метод организации очередей. Прочитайте сообщение Джона Ресига:

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

1 голос
/ 30 октября 2011

Я решил это, прыгнув (только позволяя моей функции 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 голосов
/ 28 октября 2011

Вероятно, это связано с асинхронными функциями. Таким образом, вы можете попробовать сделать эти функции с обратным вызовом, как упомянуто здесь: http://pietschsoft.com/post/2008/02/JavaScript-Function-Tips-and-Tricks.aspx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...