Вы не сможете вернуть загруженные данные из этого метода. Причина этого в том, что загрузка асинхронна и не блокирует выполнение последующего кода. Лучший вариант - вывести переменные из области действия функции и написать вторую функцию для обработки события COMPLETE
.
Должно работать что-то вроде следующего:
var rss:XML;
var t:String;
var path:String = "some path";
var urlLoader:URLLoader = new URLLoader();
private function getTitle(src:String):String
{
urlLoader.load( new URLRequest( src ) );
urlLoader.addEventListener(Event.COMPLETE, onComplete );
}
private function onComplete(event:Event):void
{
rss = XML(urlLoader.data);
t = path + rss.channel.title.toString();
}
Я понимаю, что на самом деле это не дает прямого ответа на вопрос, хотя это лучшая практика для обработки загрузки данных. Если вы действительно хотите остановить выполнение какого-либо кода до загрузки данных, возможно, можно использовать цикл while после строки addEventListener
, чтобы остановить проигрыватель до загрузки данных. Это, вероятно, следует считать не таким элегантным взломом.
private function getTitle(src:String):String
{
var urlLoader:URLLoader = new URLLoader();
var rssURLRequest:URLRequest = new URLRequest(src);
var rss:XML = new XML;
var t:String = src;
var complete:Boolean;
urlLoader.addEventListener(Event.COMPLETE,
function(event:Event):void
{
rss = XML(urlLoader.data);
t = rss.channel.title.toString();
complete = true;
});
while( !complete ) { /* sleep hack */ }
return t;
}
Я не проверял это, но, похоже, это могло сработать. Первый пример рекомендуется.