Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.08.2009, 18:59
Retrill вне форума Посмотреть профиль Отправить личное сообщение для Retrill Найти все сообщения от Retrill
  № 1  
Ответить с цитированием
Retrill

Регистрация: Jun 2009
Сообщений: 30
По умолчанию как дождаться окончания загрузки 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().

Старый 21.08.2009, 19:04
random13 вне форума Посмотреть профиль Отправить личное сообщение для random13 Найти все сообщения от random13
  № 2  
Ответить с цитированием
random13
 
Аватар для random13

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
думаю не получится, потому как у вас код выполняется тупо построчно при этом вы просите загрузить данные данные загрузятся гораздо позже чем выполниться первый метод

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

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

Старый 21.08.2009, 19:10
Retrill вне форума Посмотреть профиль Отправить личное сообщение для Retrill Найти все сообщения от Retrill
  № 3  
Ответить с цитированием
Retrill

Регистрация: Jun 2009
Сообщений: 30
Хорошо. Тогда, может, существует иной способ решить поставленную задачу. Она у меня следующая. Есть класс, объект которого должен принять ссылку на файл, а возвратить в качестве значения результат этой загрузки.
Я пишу метод этого класса, который должен загрузить данные и возвратить их в виде XML:
Код AS3:
public function load(request):XML{
    ...
}
Что написать в теле метода? Ведь результат можно поймать только в обработчике события Event.COMPLETE, а это уже другой метод класса. Что делать?

Старый 21.08.2009, 19:25
Alex_41 вне форума Посмотреть профиль Отправить личное сообщение для Alex_41 Найти все сообщения от Alex_41
  № 4  
Ответить с цитированием
Alex_41
[+4 01.09.09]

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

Старый 21.08.2009, 19:51
WRC_S вне форума Посмотреть профиль Отправить личное сообщение для WRC_S Посетить домашнюю страницу WRC_S Найти все сообщения от WRC_S
  № 5  
Ответить с цитированием
WRC_S
[+6 23.11.09]
 
Аватар для WRC_S

Регистрация: Jun 2009
Адрес: Россия
Сообщений: 318
Отправить сообщение для WRC_S с помощью ICQ
а че вам не даёт продолжет кот в событии complete_listener(e:Event.COMPLETE)

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

Старый 21.08.2009, 21:00
Retrill вне форума Посмотреть профиль Отправить личное сообщение для Retrill Найти все сообщения от Retrill
  № 6  
Ответить с цитированием
Retrill

Регистрация: Jun 2009
Сообщений: 30
WRC_S, приведу пример желаемого кода:
Код AS3:
var req:Requester=new Requester(request);//Requester - это типо написанный класс, который я не могу написать в связи с обсуждаемой проблемой. Но, допустим, он существует
var result:XML=req.doRequest;//метод doRequest должен возвратить в результате объект XML, который загружается объектом URLLoader
Проблема в том, что метод doRequest не может возвратить результат. Его может возвратить обработчик события Event.COMPLETE. И переменная result ничему не может быть равна в таком случае.

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

Старый 21.08.2009, 23:14
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 7  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
load работает ассинхронно. и то что вам нужно в любом случае не реализовать.
лучше всго при завершении загрузки самому генерировать событие, что бы потом тот, кому это нужно, отловил это событие
__________________
я могу стать всем, если только захочу

Старый 22.08.2009, 09:50
Retrill вне форума Посмотреть профиль Отправить личное сообщение для Retrill Найти все сообщения от Retrill
  № 8  
Ответить с цитированием
Retrill

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

Старый 22.08.2009, 16:35
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Нет не существует. И смысла в таком классе нет, иначе выполнение кода останавливалось бы до момента окончания загрузки данных. Оно вам надо?

Старый 22.08.2009, 19:19
$mival вне форума Посмотреть профиль Отправить личное сообщение для $mival Найти все сообщения от $mival
  № 10  
Ответить с цитированием
$mival
 
Аватар для $mival

Регистрация: Oct 2005
Адрес: Russia, Irkutsk
Сообщений: 742
прочитал 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');
}
__________________
smival.com

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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