Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Метод, возвращающий данные из вконтакте (http://www.flasher.ru/forum/showthread.php?t=207398)

trot99 14.04.2014 22:35

Метод, возвращающий данные из вконтакте
 
Добрый день, уважаемые формучане!

Пишу класс для получения данных из ВК: 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.
Что посоветуете?

caseyryan 14.04.2014 23:04

Не может он возвращать данные через 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(); // ну и можно тут, к примеру сразу данные передавать, а можно присвоить их какой-то переменной и получать через геттер
}


trot99 14.04.2014 23:23

Что такое "колбэк"?

Если я правильно понял, то в вашем примере я буду получать данные так:
Код AS3:

var _onCompleteUser:Function = null;
var API:myAPI;
myAPI.getThisUserFirstName(_onCompleteUser);
 
function _onCompleteUser(e:Object)
{
var s:String = "";
s=e;
}


caseyryan 14.04.2014 23:26

нет. Так нельзя объявить функцию. Вот это
Код AS3:

var _onCompleteUser:Function = null;

должно быть в классе myAPI
Цитата:

Что такое "колбэк"?
callback

trot99 14.04.2014 23:45

если я использую функцию
Код 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". Разве нет?

ZackMercury 15.04.2014 00:56

Цитата:

Что посоветуете?
Выучить язык, а уж потом разбираться с контактом.

trot99 15.04.2014 00:59

Цитата:

Сообщение от SuriTheAngel (Сообщение 1163662)
Выучить язык, а уж потом разбираться с контактом.

ну вы то сами не следуете своим советам

Добавлено через 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"];
}


ZackMercury 15.04.2014 01:25

Цитата:

ну вы то сами не следуете своим советам
Это вы о чём?


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

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