![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2001
Сообщений: 33
|
Задача - нужно произвести последовательное обращение к одному или нескольким серверам, при каждом новом вызове использовать данные полученные от предыдущего.
Сейчас я юзаю калбеки вот так 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 и не разбирая их код. Спасибо Последний раз редактировалось Troglodit; 22.05.2010 в 13:51. |
|
|||||
|
Почему бы Вам не сделать какой-нибудь массив-очередь и опрашивать сервер последовательно следуя этой очереди? По получении каждого callback'а проверять остались ли еще незагруженные элементы в очереди. Количество загруженных или оставшихся можно сделать отдельной переменной.
Дерзайте. |
|
|||||
|
Регистрация: Feb 2001
Сообщений: 33
|
Поставить в очередь - запросто. Но ведь беда не в том что я не могу поставить в очередь а в том что явно не понятно из описания функций step1,2,3 какие параметры и сколько будет принимать onSuccess, а очередь тут не помогает
Добавлено через 41 час 0 минут Кто нибудь? |
|
|||||
|
Я думаю надо как-то стандартизировать параметры или где-то описать их отдельно, если привести к общему знаменателю никак.
|
|
|||||
|
Регистрация: Feb 2001
Сообщений: 33
|
Ну тоесть на уровне компиляции это проверить никак не возможно? Вот в шарпе там делегаты описываются со всеми параметрами и если что-то не совпадает в вызове - сразу ошибка еще на этапе компиляции
что приходит тут на ум - это понасоздавать классов - хранителей функций и параметров, типа Function_Int_String_String его параметры забивать в конструкторе. И тогда function Но это настолько через одно место что нет слов. Кроме того так надо будет постоянно создавать новые классы если надо будет передать какойто класс в такую цункцию, или ппросто новую комбинацию. |
|
|||||
|
Можно сделать примерно так:
__________________
...вселенская грусть Последний раз редактировалось iNils; 24.05.2010 в 15:29. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Нормально при компиляции проверить, что переданная функция принимает такие-то параметры - никак, ибо тип Function вот такая простая вещь. Я лично этому рад.
Можно передавать не функцию, а айдишник, делать switch по айдишнику и в нем писать имя private метода. Будет что надо, но switch я лично не люблю. Можно поставить в функции проверку на тип аргументов и помирать с криками, если не те, но рантайм будет, да. Но так ли нужна проверка при компиляции на тип данных? Это если там куча народу этот код пишет, то может есть смысл. И это, врачи сильно рекомендуют не создавать динамически функции. Т.е. в любом случае рекомендую сделать. и уже okStep1 передавать. |
|
|||||
|
Регистрация: Feb 2001
Сообщений: 33
|
свитч не катит тк тормозить будет если широко внедрить все это. Да народу юзает много этот код, так что хочется сделать попонятнее.
динамические функции всмысле анонимные? Не рекомендуют потому что утечки быть могут? не будут если грамотно все сделать. Кстати в методы класса выносить не обязательно чтобы ф-я перестала быть анонимом, можно просто создать ее именованную внути метода где она нужна. Если же выносить в методы то это ужасно раздует интерфейс Цитата:
|
|
|||||
|
Регистрация: Feb 2001
Сообщений: 33
|
А чем тут он поможет ? причем тут разные состояния ?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 18:32. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|