![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 20
|
Здравствуйте, у меня следующий вопрос:"При разборе кода примеров vkontakte API не могу понять одно место".
//Я еще плохо разбираюсь во флеше, actionscripte и ООП в частности. Разбираю код, представленный на: http://vkontakte.ru/pages.php?o=-1&p...F2%E0%EA%F2%E5 по ссылке: http://vkontakte.ru/source/Tetris.zip В файле DataProvider.as, в функции _sendRequest, я так понимаю идет отсыл данных. Как я понимаю, получает метод API и параметры для запроса. По аналогии с представленным в этом файле кодом я написал обращение к этой функции через функцию: public function getInstPril(uid:String,onComplete:Function):String
{
var t="ggg";
_sendRequest("isAppUser", {params:{uid:uid}, onComplete:onComplete})
return t;
}//end function
Далее по аналогии с вложенным в пример кодом пишу private var dataProvider: DataProvider; В конструкторе класса - dataProvider = new DataProvider(); До этого момента может и не все понимаю, но работает. Далее описываю метод для получения установил ли юзер приложение к себе или нет: public function getInstUser()//Вернем - установил ли юзер приложение
{
var inst_yes=0;//По умолчанию - приложение у юзера не установлено
//Получим массив данных пользователей:
var user_dead_mas:Array = new Array;
user_dead_mas=getFriendDataMas();//Получим копию массива данных всех юзеров
for(var d=0;d<user_dead_mas.length;d++)//Переберем весь массив
{
trace("d="+d);
setDInstTek(d);//Закинем в класс d
setDInstOk(0);//Укажем, что пользователь еще не обработан
trace("ok="+_global.test_ex.getDInstOk());
dataProvider.getInstPril(user_dead_mas[d]['uid'],function(success:Boolean)
{
//Здесь нужно получить id, который обрабатывается
if (success && _global.test_ex.getDInstOk()==0)
{
for (var fNode:XMLNode = this.firstChild; fNode != null; fNode = fNode.nextSibling)
{
var response_this: String;
for (var cNode:XMLNode = fNode.firstChild; cNode != null; cNode = cNode.nextSibling)
{
switch (cNode.nodeName)
{
case 'response': response_this = cNode.firstChild.nodeValue; break;
}//end switch
}//end for
}//end for
trace("this=="+this);
trace("response_this="+response_this);
var d_tek=_global.test_ex.getDInstTek();
_global.test_ex.setInstPrilUserAdd(d_tek,response_this);
_global.test_ex.setDInstOk(1);
}//end if (success)
}),100);//end dataProvider
}//end for
_global.test_ex.setObnovlenFriendIdMas(5);
trace("юзер="+inst_yes);
}//end function
Во-первых не понимаю строку:"dataProvider.getInstPril(user_dead_mas[d]['uid'],function(success:Boolean)". Это где эта фнкция висит? В dataProvider?. Не понимаю как можно передать в качестве параметра функцию.Или здесь что-то другое делается? Когда срабатывает код, описанный в этой getInstPril? Данные есть, обрабатываются, но как-то странно - в трейсе вижу, что перебирается for, а эта функция выполняется как-то независимо от цыкла. В руководстве:"http://vkontakte.ru/pages.php?o=-1&p=%C2%E7%E0%E8%EC%EE%E4%E5%E9%F1%F2%E2%E8%E5%20%EF%F0%E8%EB%EE%E6%E5%ED%E8%FF%20%F1%20API" написано, что:"Сервер принимает не более трёх запросов в секунду". Как сделать, чтобы эта (для меня непонятно где зависшая функция с передающим (или получающим?) в качестве параметра функцию (тоже не очень понятно как работающую), так вот чтобы эта функция была нормальым вызовом в цыкле и, например с проверкой на setTimeOut какойнибудь. Наверное не очень внятно обяснил, но если кто понял - уделите пожалуйста немного времени и объясните идиоту где тут собака порылась. Заранее спасибо. |
![]() |
Часовой пояс GMT +4, время: 14:41. |
|
|
« Предыдущая тема | Следующая тема » |
|
|