Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как вернуть строку из URLLoader (http://www.flasher.ru/forum/showthread.php?t=96300)

vvk80 28.05.2007 15:45

Как вернуть строку из URLLoader
 
Уважаемые форумчане, помогите мне пожалуйста!

Я, наверное, чего-то не понимаю, но почему в следующем коде я никак не могу получить строку на выходе???

Код:

function textLoader():String
                {
                        var loader:URLLoader = new URLLoader();
                        var resultText: String = "";
            var request:URLRequest = new URLRequest("Texts\\umatch35.txt");
            try
                        {
                                loader.load(request);
                        }
                        catch (error:Error)
                        {
                                trace("Unable to load requested document.");
            }
                        loader.addEventListener(Event.COMPLETE, completeHandler);
                       
                        function completeHandler(event:Event):void
                        {
                                resultText = loader.data;
                                //trace(resultText);
                               
                                //
                        }
                        //trace(resultText);
                        return resultText;
                       
        }

судя по сообщениям trace,сначала обрабатывается команда return, а только потом срабатывает функция completeHandler... В итоге resultText = пусто. Народ, как полечить или может быть я сам дурак? Тогда подскажите где?

Заранее спасибо!

miramax 28.05.2007 15:56

всё правильно.
Функция textLoader, не дождавшись окончания загрузки возвращает ничего.

Загрузка файла происходит не моментально, а Action Script исполняется в одном потоке.
Функция completeHandler будет вызвана по окончании загрузки файла.

vvk80 28.05.2007 16:00

Цитата:

Сообщение от miramax
всё правильно.
Загрузка файла происходит не моментально, а
Action Script исполняется в одном потоке.
Функция completeHandler вызывается не моментально, а по окончании загрузки файла.

Спасибо! Это кстати фигово! Но как мне все-таки строку то вернуть, я не хочу какждый раз эту функцию копировать (у меня порядка 20-ти лоадеров получится). Это вообще нарушит всякие принципы OOP программирования... Как мне все-таки строку вернуть? Ну не таймер же все-таки ставить? Наверняка месть дргйо способ..:eek:

miramax 28.05.2007 16:03

Зачем копировать?
Где нарушается ООП?
Для обработки данные нужно сначала загрузить.

etc 28.05.2007 16:06

vvk80, отредактируйте свой пост и оформите код тегами [code][/code].

vvk80 28.05.2007 16:06

Цитата:

Сообщение от miramax
Зачем копировать?
Где нарушается ООП?
Для обработки данные нужно сначала загрузить.

Наверное я туплю... Я понимаю, что данные надо сначала загрузить... Но подскажите мне, пожалуйста, как мне выкрутиться из текущей ситуации. Направьте меня в нужное русло!

Заранее спасибо!

etc 28.05.2007 16:10

Загрузка данных происходит асинхронно с кодом. Их невозможно вернуть сражу же после вызова load.

miramax 28.05.2007 16:13

Ну у тебя всё верно, кроме функции, которой ты захотел всё заинкапсулировать и моментально возвратить. Общий план такой:
Код:

var loader:URLLoader = new URLLoader();
loader.load(new URLRequest('text.txt'));
loader.addEventListener(Event.COMPLETE, completeHandler);
function completeHandler(e:Event):void
{
    trace(loader.data)
}


vvk80 28.05.2007 17:02

Цитата:

Сообщение от miramax
Ну у тебя всё верно, кроме функции, которой ты захотел всё заинкапсулировать и моментально возвратить. Общий план такой:
Код:

var loader:URLLoader = new URLLoader();
loader.load(new URLRequest('text.txt'));
loader.addEventListener(Event.COMPLETE, completeHandler);
function completeHandler(e:Event):void
{
    trace(loader.data)
}


Спасибо,miramax!
Пока обойдемся без инкапсуляции;) А потом я туда таймер запихну, который будет смотреть, когда переменная заполнится и возвращать ее... Хотя таймер ресурсы жрет дико... я тут решил картинки подвигать по таймеру, так у меня 100% загрузка процессора

miramax 29.05.2007 02:26

Какой таймер?
completeHandler это всё что нужно.
А чего-то двигать по экрану нужно по событию Event.ENTER_FRAME ...
Посмотри внимательнее примеры в хелпе.


Часовой пояс GMT +4, время: 07:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.