Здравствуйте, у меня следующий вопрос:"При разборе кода примеров 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, я так понимаю идет отсыл данных.

Код:
private function _sendRequest(method:String, options:Object)
{
...
}
Как я понимаю, получает метод API и параметры для запроса.
По аналогии с представленным в этом файле кодом я написал обращение к этой функции через функцию:

Код:
public function getInstPril(uid:String,onComplete:Function):String
{
var t="ggg";
_sendRequest("isAppUser", {params:{uid:uid}, onComplete:onComplete})
return t;
}//end function
Далее в произвольном классе test.as подключаю import Tetris.DataProvider;
Далее по аналогии с вложенным в пример кодом пишу 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 какойнибудь. Наверное не очень внятно обяснил, но если кто понял - уделите пожалуйста немного времени и объясните идиоту где тут собака порылась. Заранее спасибо.