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

LA_ 16.07.2009 23:31

Ожидать завершения функции
 
Подскажите, пожалуйста - есть функция
Код AS3:

public function getVariableValue(Session:Number) {
var VariableValue:Number=0;
_data_provider.request(DataProvider.GET_VARIABLE, {
  params:{key:2065, session: Session},
  onComplete: function(data) {
      trace(Session+"- "+data);
      VariableValue=data;
    }
  });
return VariableValue;
}

где-нить в коде я её вызываю - _data_accessor.getVariableValue(1) - чтоб вывести, например, на экран, но есть большой шанс, что функция вернет мне 0 вместо положенного значения, т.к. событие onComplete наступает позднее, чем return VariableValue.
как с этим бороться?

ramshteks 16.07.2009 23:35

ну дождаться события, а там уже вашу гетВариабл.

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

LA_ 16.07.2009 23:52

нечитаем из-за форматирования?
попробуем снова:
Код AS3:

public function getVariableValue(Session:Number) {
  var VariableValue:Number=0;
  _data_provider.request(DataProvider.GET_VARIABLE, {
      params:{key:2065, session: Session},
      onComplete: function(data) {
          trace(Session+"- "+data);
          VariableValue=data;
      }
  });
return VariableValue;
}

_data_provider.request - не моя функция. а результат своей работы она возвращает в виде onComplete: function(data). как можно дождаться результата её работы?

Добавлено через 17 минут
хм. в голову пришла след. идея - завести еще одну переменную:
var Completed:Boolean=false;
при наступлении события делать её true,
а перед return VariableValue - бесконечный цикл проверяющий значение Completed.
Или есть более правильные способы?

ramshteks 17.07.2009 00:17

bad choiсe, newbie!
я что то вообще не пойму что такое этот онКомплит...
Это слушатель или что...

Я собсна залез в хелп, понял что вы какой то свой видимо написали Дата Провайдер. Скорее всего для запроса данных с сервера(Вконтакте??). Так вот вам нужно сначала дождаться загрузки, а только потом уже вытаскивать данные и идти дальше(слать события, вызывать методы и прочее).

ну это если я правильно понял.

musat 17.07.2009 00:20

Да, DataProvider для запроса данных с ВКонтакте API. Кстати, можно было просто посмотреть, как это сделано в исходниках чата :)

Как вариант, написать callback-функцию onGetVar:
Код AS3:

public function getVariableValue(Session:Number, onGetVar:Function) {
  var VariableValue:Number=0;
  _data_provider.request(DataProvider.GET_VARIABLE, {
      params:{key:2065, session: Session},
      onComplete: function(data) {
          trace(Session+"- "+data);
          onGetVar(data);
      }
  });
}
 
public function onGetVar(data:String):void {
  trace(data);
}


LA_ 17.07.2009 00:25

ramshteks, нет, это не я написал dataprovider. такой идет в комплекте к чату вконтакте.

musat, спасибо. только мне теперь нужна ваша помощь, чтоб понять, как этим воспользоваться.
моя задача - выполнив _data_accessor.getVariableValue(1), получить значение функции, чтоб потом вывести его (значение) на экран.
понятно, что можно это сделать, например, в onGetVar (как вы сейчас делаете там trace этого значения). но так будет некрасиво.

поскольку вы сейчас передаете аргумент onGetVar моей функции то, видимо, как то это значение можно прочитать. но как? ))

musat 17.07.2009 01:03

Что-то я перемудрил, так лучше:
Код AS3:

public function getVariableValue(Session:Number, onGetVar:Function) {
  var VariableValue:Number=0;
  _data_provider.request(DataProvider.GET_VARIABLE, {
      params:{key:2065, session: Session},
      onGetVar);
}
 
public function onGetVar(data:String):void {
  trace(data);
}


LA_ 17.07.2009 10:10

musat, а все-таки как этим пользоваться? ))

musat 17.07.2009 17:47

LA_, в смысле "как пользоваться"? В функцию onGetVar передается параметр data, т.е. значение полученной контактовской переменной.

LA_ 17.07.2009 17:55

Цитата:

в смысле "как пользоваться"?
мне нужно вывести полученное значение, например, в текстовое поле.
как мне получить значение data в коде (за пределами DataAccessor), т.е. вне функций getVariableValue и onGetVar? или предлагается onGetVar разместить не в DataAccessor?


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

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