Форум 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=128992)

Retrill 21.08.2009 18:59

как дождаться окончания загрузки URLLoader
 
Ситуация такая. Пусть есть объект типа URLLoader, назовем его urlloader. Он выполняет метод urlloader.load(параметры). Далее идет строка кода, которая должна выполняться лишь после того, как этот метод загрузит результат. Как это сделать?

Для уточнения напишу фрагмент кода:
Код AS3:

function load():void{
    urlloader.addEventListener(Event.COMPLETE,complete_listener);
    urlloader.load(new ULRRequest(request));
    trace('done');
}
 
function complete_listener(e:Event.COMPLETE):void{
    trace('from complete');
}

Так вот нужно, чтобы в консоли написалось сначала 'from complete', а потом уже 'done'. По факту получается наоборот при вызове функции load().

random13 21.08.2009 19:04

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

попробуйте прочитать скрипт как машина:

выполнить функцию по окончанию загрузки
загружать данные
сделать trace
и тд...

Retrill 21.08.2009 19:10

Хорошо. Тогда, может, существует иной способ решить поставленную задачу. Она у меня следующая. Есть класс, объект которого должен принять ссылку на файл, а возвратить в качестве значения результат этой загрузки.
Я пишу метод этого класса, который должен загрузить данные и возвратить их в виде XML:
Код AS3:

public function load(request):XML{
    ...
}

Что написать в теле метода? Ведь результат можно поймать только в обработчике события Event.COMPLETE, а это уже другой метод класса. Что делать?

Alex_41 21.08.2009 19:25

Нужно продолжать работать с данными после выполнения события COMPLETE у урлЛоадера, в обработчике "complete_listener" генерировать свое кастомное событие что-то типа "ХМЛ Данные урлЛоадером загружены", и передавать управление слушателю этого события, а так как вы написали не получиться.

WRC_S 21.08.2009 19:51

а че вам не даёт продолжет кот в событии complete_listener(e:Event.COMPLETE)

в этой функции пешите чё вам надо, а если надо то вызывайте другую функкцию из функции complete_listener которая бы и выводила trace('done');

Retrill 21.08.2009 21:00

WRC_S, приведу пример желаемого кода:
Код AS3:

var req:Requester=new Requester(request);//Requester - это типо написанный класс, который я не могу написать в связи с обсуждаемой проблемой. Но, допустим, он существует
var result:XML=req.doRequest;//метод doRequest должен возвратить в результате объект XML, который загружается объектом URLLoader

Проблема в том, что метод doRequest не может возвратить результат. Его может возвратить обработчик события Event.COMPLETE. И переменная result ничему не может быть равна в таком случае.

Пока что буду использовать вариант, предложенный Alex_41. Отдельное спасибо ему за идею.

Felicast 21.08.2009 23:14

load работает ассинхронно. и то что вам нужно в любом случае не реализовать.
лучше всго при завершении загрузки самому генерировать событие, что бы потом тот, кому это нужно, отловил это событие

Retrill 22.08.2009 09:50

ОК, это я уже понял. Может, тогда существует другой класс (помимо URLLoader), который может сделать то, что мне нужно?

alatar 22.08.2009 16:35

Нет не существует. И смысла в таком классе нет, иначе выполнение кода останавливалось бы до момента окончания загрузки данных. Оно вам надо?

$mival 22.08.2009 19:19

прочитал 3 раза и не понял суть проблемы.
если отвечать влоб написанному то код будет выглядеть приблизителньо так
Код AS1/AS2:

function load():void{
    urlloader.addEventListener(Event.COMPLETE,complete_listener);
    urlloader.load(new ULRRequest(request));
}
 
function complete_listener(e:Event.COMPLETE):void{
    trace('from complete');
    trace('done');
}



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

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