Показать сообщение отдельно
Старый 22.05.2010, 13:07
Troglodit вне форума Посмотреть профиль Отправить личное сообщение для Troglodit Найти все сообщения от Troglodit
  № 1  
Ответить с цитированием
Troglodit

Регистрация: Feb 2001
Сообщений: 33
По умолчанию последовательность обращений к серверу с callback. Как красивее сделать?

Задача - нужно произвести последовательное обращение к одному или нескольким серверам, при каждом новом вызове использовать данные полученные от предыдущего.

Сейчас я юзаю калбеки вот так

Код AS3:
function step1( onSuccess:Function,onFailed:Function):void{
...
       if (isOk){
              onSuccess(someData1);
       }else {
              onFailed();
       }
}
 
function step2( onSuccess:Function,onFailed:Function):void{
...
       if (isOk){
              onSuccess(someData2);
       }else {
              onFailed();
       }
}
 
function step3( onSuccess:Function,onFailed:Function):void{
...
       if (isOk){
              onSuccess(someData3);
       }else {
              onFailed();
       }
}
 
//--------
step1(
       function(someData1:SomeType1):void{
       // ok step1
       ...
       step2(
              function(someData2:SomeType2):void{
              // ok step2
              ...
              step3(
                     function(someData3:SomeType3):void{
                     // ok step3
                     ...
                     ///  и пошло дальше
                     }
                     ,
                     function():void{
                     // error step3
                     }
              );
 
              }
              ,
              function():void{
              // error step2
              }
              );
       }
       ,
       function():void{
       // error step1
       }
       );
 
}
Что не нравится: в основном то что явно не понятно из описания функций step1,2,3 какие параметры и сколько будет принимать onSuccess.
Если делать это через события то нагромождение кода будет еще больше, а однозначности все равно не будет, так как не известно однозначно на какое событие надо подписываться.

Известны ли кому-то более однозначные решения этой задачи? Или хотя бы более элегантные ? Тоесть чтобы можно было написать это все не читая комментарии к step1,2,3 и не разбирая их код.

Спасибо


Последний раз редактировалось Troglodit; 22.05.2010 в 13:51.