Цитата | как сделать, чтобы функция класса возвращала результат уже после полной обработки?
|
Никак. События в as3 происходят асинхронно и функция не может блокировать выполнение программы, ожидая наступления события. Но, если требуется получать загружаемые данные из внешнего класса, то можно реализовать это например так:
Код | package { import flash.events.EventDispatcher; import flash.events.Event; public class p001 extends EventDispatcher{ //... public function requestUserName():String { //... loader.addEventListener(Event.COMPLETE, onComplete); //... } private function onComplete(e:Event):void { //... //диспетчеризуем пользовательское событие. передаем ему имя пользователя, которое содержится в loader.data, когда загрузка завершена dispatchEvent(new CustomEvent(Event.COMPLETE, loader.data)); } } }
//вспомогательный класс. располагается в том же файле import flash.events.Event; class CustomEvent extends Event { public var userName:String; public function CustomEvent(type:String, userName:String, bubbles:Boolean = false, cancelable:Boolean = false):void { super(type, bubbles, cancelable); this.userName = userName; } }
|
Использование класса:
Код | private var s:String; private var p:p001 = new p001; p.requestUserName(); p.addEventListener(Event.COMPLETE, onUserNameGot); private function onUserNameGot(e:CustomEvent):void { s = e.userName; }
|
|