Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Получить результат функции с асинхронным событием внутри (http://www.flasher.ru/forum/showthread.php?t=215725)

djken 20.06.2019 03:14

Получить результат функции с асинхронным событием внутри
 
Всем привет. Подскажите пожалуйста.

Как получить результат вызываемой функции, если внутри нее идет загрузка данных с сервера, следовательно внутри подписка на событие и результат получаем только аж в обработчике ?

Наглядный пример:
Код AS3:

_str = getJson('https://site.ru/json'); // как получить данные из функции getJson, если данные получаем только в onComplete ?
 
private function getJson(link:String):String
{
  var json:String = new MainLoader(link);
  json.addEventListener(Event.COMPLETE, onGetJsonComplete);
  json.load();
 
  return json;
}
 
private function onGetJsonComplete (e:Event):void
{
  var data:String = e.target.data;
}

P.S. конечно можно в обработчике onGetJsonComplete по получению данных запихивать их в переменную класса и вызывать кастомное событие.. Но мне кажется это не совсем изящным. Может есть более правильное решение?

undefined 20.06.2019 12:52

простой ответ - никак.К моменту окончания выполнения getJson данные еще не получены.Делать все в обработчике и есть правильное решение.
ПС:от Event.COMPLETE надо бы отписываться в обработчике.

djken 20.06.2019 14:26

понятно. спасибо

ZergMaster 20.06.2019 17:27

ну да... никак.. Асинхронных вызовов нету в as3. Самое близкое здесь, это callback функцией сделать

Код AS3:

getJson('https://site.ru/json', function (result: String) {
    _str = result;
    });
 
private function getJson(link:String, callback: Function):void
{
  var json:String = new MainLoader(link);
  json.addEventListener(Event.COMPLETE, onGetJsonComplete);
  json.load();
 
  function onGetJsonComplete (e:Event):void {
      json.removeEventListener(Event.COMPLETE, onGetJsonComplete);
      callback(e.target.data);
      }
}

только await сделать таким макаром не получится


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

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