циклы as3 и прослушиватели событий

У меня есть массив, который возвращает многомерные данные из базы данных mysql, когда они собираются, функция createNews создает пользовательский интерфейс. Проблема, с которой я сталкиваюсь, заключается в том, что цикл повторяется быстрее, чем создается пользовательский интерфейс, есть ли способ использовать прослушиватели событий с циклами, чтобы он продолжался только после того, как моя функция завершила свою работу?

var t:Array = responds.serverInfo.initialData;  
for (var i:uint = 0; i < t.length; i++) {
    var date = t[i][1];
    var newstitle = t[i][2];
    var story= t[i][3];
    var image = t[i][4];

    createNews(date, newstitle, story, image);    
}

person Ross    schedule 13.04.2010    source источник


Ответы (2)


у вас может быть пользовательский обратный вызов, когда вы закончите создание элемента пользовательского интерфейса, который затем обработает следующий элемент в массиве.

var t:Array = responds.serverInfo.initialData;
var numProcessed:int = 0;

private function processNext() : void {
    if (numProcessed == t.length) return;
    var date = t[numProcessed][1];
    var newstitle = t[numProcessed][2];
    var story= t[numProcessed][3];
    var image = t[numProcessed][4];

    numProcessed++;

    createNews(date, newstitle, story, image);  
}

в зависимости от того, как работает ваша функция createNews и как все структурировано, ваш процесс вызова processNext после завершения пользовательского интерфейса будет отличаться. Я предполагаю, что createNews создаст новый класс или что-то в этом роде, в этом случае вы прикрепите прослушиватель событий к этому новому классу, прослушивая событие COMPLETE, которое будет отправлено после завершения создания, и установите processNext в качестве обработчика событий.

person jonathanasdf    schedule 13.04.2010
comment
оба, кажется, работают, я не знал, что flash был однопоточным. Хотя createnews() вызывает еще 3 функции, так что, может быть, это все? - person Ross; 14.04.2010

Разве ваша функция createNews не блокирует цикл до тех пор, пока он не вернется? ActionScript является однопоточным, поэтому я не уверен, как цикл может продолжаться, когда функция createNews еще не завершена.

person Martin Konecny    schedule 13.04.2010
comment
скажем, загруженный компонент переходит (tweens) или загружает что-то с помощью загрузчика или urlloader, или с помощью timerEvent, или setTimeout. Все это было бы асинхронно - person jonathanasdf; 14.04.2010