Используя AsyncToken и AsyncResponder
Я хочу получить два уровня результатов иерархической структуры. Первые результаты AsyncToken - ОК, затем я устанавливаю цикл for и вызываю результаты следующего уровня одинаковым образом на каждом шаге цикла. Здесь проблема, token2.addResponder(responder2);
никогда не возвращайте результаты вовремя на каждом шаге цикла. В конце концов, он посылает мне результаты для результатов цикла. Но мне нужно на каждом шагу. Можете ли вы рассказать мне о моей ошибке?
public function getChildResultHandler(event:ResultEvent, token:Object=null ):void
{
myObject=event.result; //first asynToken result is Ok
var myArrayCol:ArrayCollection=new ArrayCollection();
myArrayCol=ArrayCollection(myObject);
var mlObject:MLObject=new MLObject();
var i:int;
for(i=0;i<myArrayCol.length;i++)
{
mlObject=myArrayCol[i];
if (mlObject.Type=="Bin")
{
token2=new AsyncToken(null);
token2=myService.GetChildObjects(sessionID,mlObject.ObjectID);
responder2=new AsyncResponder(getNextLevelChild,getChildFaultHandler);
token2.addResponder(responder2);
// I cant get results here
// this query goes to getNextLevelChild func after for loop results
}
}
}
Нужно ли ждать обоих результатов, если да, как я могу ждать ответчика или токена?
2 ответа
Этот учебник может помочь, потому что он решает проблему, очень похожую на то, что вы испытываете. Есть 3 удаленных вызова процедур, которые передаются буквам ABC. Звонки возвращаются в порядке BAC. Учебное пособие демонстрирует, как использовать ASyncToken и Responders, чтобы определить, какой обработчик результатов запускается для какого вызова.
Потому что это асинхронные вызовы. Невозможно узнать порядок возвращаемых результатов. Может быть, первый звонок закончится первым, может быть второй.
Таким образом, мы должны дождаться окончания всех асинхронных вызовов для получения правильных результатов.