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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Apr 2014
Сообщений: 4
Post Метод, возвращающий данные из вконтакте

Добрый день, уважаемые формучане!

Пишу класс для получения данных из ВК: myAPI, а затем его использую из mainClass

Возможно ли написать метод myAPI.getUserFirstName() который возвращает нужные данные.

Код AS3:
var API:myAPI;
var s:String = "";
s=myAPI.getThisUserFirstName();
я делаю так,
Код AS3:
public function getThisUserFirstName():void
		{
			VK.api("users.get", { user_ids: flashVars['viewer_id'], fields: "first_name" }, finishedGetUser, finishedGetUserError);
		}
но не могу возвратить результат через return.
Что посоветуете?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Не может он возвращать данные через return. В ас3 реализована система событий. Язык однопоточный, и он не может остановиться и подождать пока придут данные с сервера. Поэтому тут есть два варианта, либо отсылать событие, когда данные пришли, и по событию их получать, либо передавать в этот метод колбэк, и дергать его по приходу данных. Второй вариант удобнее, так как потребует меньше кода.

В общем случае это выглядит примерно так
Код AS3:
private static var _onCompleteUser:Function = null;
public static function getUserData(onCompleteUser:Function):void {
    _onCompleteUser = onCompleteUser;
    VK.api("users.get", { user_ids: flashVars['viewer_id'], fields: "first_name" }, finishedGetUser, finishedGetUserError);
}
private static function finishedGetUser(params:Object):void {
      if (_onCompleteUser != null) _onCompleteUser.apply(); // ну и можно тут, к примеру сразу данные передавать, а можно присвоить их какой-то переменной и получать через геттер
}

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

Регистрация: Apr 2014
Сообщений: 4
Что такое "колбэк"?

Если я правильно понял, то в вашем примере я буду получать данные так:
Код AS3:
var _onCompleteUser:Function = null;
var API:myAPI;
myAPI.getThisUserFirstName(_onCompleteUser);
 
function _onCompleteUser(e:Object)
{
var s:String = "";
s=e;
}

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
нет. Так нельзя объявить функцию. Вот это
Код AS3:
var _onCompleteUser:Function = null;
должно быть в классе myAPI
Цитата:
Что такое "колбэк"?
callback

Старый 14.04.2014, 23:45
trot99 вне форума Посмотреть профиль Отправить личное сообщение для trot99 Найти все сообщения от trot99
  № 5  
Ответить с цитированием
trot99

Регистрация: Apr 2014
Сообщений: 4
если я использую функцию
Код AS3:
private static var _onCompleteUser:Function = null;
public static function getUserDataByID(id:Number,onCompleteUser:Function):void {
    _onCompleteUser = onCompleteUser;
    VK.api(...,finishedGetUser,error);
}
private static function finishedGetUser(params:Object):void {
      if (_onCompleteUser != null) _onCompleteUser.apply(null,[params[0]]); 
}
а затем в main
Код AS3:
var API:myAPI;
myAPI.getUserDataByID(1000,f1);
myAPI.getUserDataByID(1001,f2);
 
function f1(e:Object)
{
    var s:String = e["first_name"];
}
function f2(e:Object)
{
    var s:String = e["first_name"];
}
то могут быть вызвана дважды f2 вместо "по одному разу f1 и f2". Разве нет?


Последний раз редактировалось trot99; 15.04.2014 в 00:51. Причина: дополнение
Старый 15.04.2014, 00:56
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 6  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
Что посоветуете?
Выучить язык, а уж потом разбираться с контактом.
__________________
There is no thing in this world that is not simple.

Старый 15.04.2014, 00:59
trot99 вне форума Посмотреть профиль Отправить личное сообщение для trot99 Найти все сообщения от trot99
  № 7  
Ответить с цитированием
trot99

Регистрация: Apr 2014
Сообщений: 4
Цитата:
Сообщение от SuriTheAngel Посмотреть сообщение
Выучить язык, а уж потом разбираться с контактом.
ну вы то сами не следуете своим советам

Добавлено через 7 минут
Разобрался вроде, спасибо caseyryan

myAPI
Код AS3:
public static function getUserDataByID(id:Number,onCompleteUser:Function):void {
    VK.api(...,onCompleteUser,error);
}
main

Код AS3:
var API:myAPI;
myAPI.getUserDataByID(1000,f1);
myAPI.getUserDataByID(1001,f2);
 
function f1(e:Object)
{
    var s:String = e[0]["first_name"];
}
function f2(e:Object)
{
    var s:String = e[0]["first_name"];
}

Старый 15.04.2014, 01:25
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 8  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Цитата:
ну вы то сами не следуете своим советам
Это вы о чём?
__________________
There is no thing in this world that is not simple.

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

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

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


 


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


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