| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > gwt rpc не понятки |
| Автор: fara86 6.8.2009, 13:46 | ||
| есть пару методов возращяющее название времен года и месяцы мне нужно получить название времени года и какие у него месяцы делаю так
но, получаю к примеру лето зима весна осень июнь июлю ..................... хоть и у меня getMonth() вызывается в цикле getSeason() но все равно пока весь getSeason() не выполнится, до getMonth() дело не доходит, где ошибка у меня? |
| Автор: andyhomes 6.8.2009, 14:45 |
| Помедитируйте на досуге про однопотоковую среду (JS), асинхронные вызовы, DeferredCommand (прицепом). |
| Автор: fara86 7.8.2009, 07:18 |
| т.е. мне нужно применить синхронный вызов правильно? |
| Автор: andyhomes 7.8.2009, 08:35 | ||
Так и работает, по-другому - никак. Ну, а чтобы реализовать то, что вы хотите... можно, например, использовать очередь для сизонов и инициировать обработку следующего в методе получения месяцев (в колбэке, естественно). |
| Автор: fara86 7.8.2009, 08:41 | ||||||||
А чуть подробнее нельзя? А что gwt не поддерживает синхронные вызовы? Я провел тестик маленький объявляю массив строк
затем в методе
вывожу res[0]; и после опять вывожу
но на консоли выводится null Лето т.е. получается доходит дело до onSuccess() и не получив ответа он продолжает выполнять программу, а как ответ пришел в callback то выводится на экран лето |
| Автор: andyhomes 7.8.2009, 09:22 |
GWT, в общем-то, тут не причем. Он только компилирует ваш код на Java в JavaScript. Нужно понимать как работает AJAX. А работает он, грубо говоря, через XmlHttpRequest (XHR). JS в браузере (однопотоковая среда) может посредством XHR отправить запрос, но время его исполнения не известно и может быть долгим, и в случае синхронного вызова JS бы просто простаивал, ожидая завершения запроса. Поэтому XHR-у сообщаются JavaScript-callback-методы, которые он (XHR) вызывает в окончании обработки запроса. Зато, паралельно с выполнением AJAX-запрос(а/ов), JS может продолжить свою работу... Короче, синхронность сами реализуйте. Подумайте, в свете новых представлений, как это можно сделать. Ну очередь - это один вариант, флаги какие-нибудь можно прикрутить, таймеры... Можно, конечно и с другой стороны подойти - максимально использовать выгоды AJAX. |
| Автор: fara86 7.8.2009, 09:26 |
| мда нет синхронности помоему это минус большой, т.е. если допустим пользователь логинится, еше не получив ответа он выполняется другая часть кода, глупо это, а реализовывать свое это не изящно, но как вариант пойдет=( |
| Автор: andyhomes 7.8.2009, 09:39 | ||||
Это данность.
Это "кривые руки".
Глупо - делать выводы, не изучив достаточно технологию. Смотрите примеры, думайте, изучайте... |
| Автор: fara86 7.8.2009, 10:59 | ||||
Тогда у всех программистов кривые руки, так как нет идеального кода=)
если вы знаете изящное решение моей проблемы может поможете, а то сказать типо смотри доки и т.д каждый может сказать |
| Автор: andyhomes 7.8.2009, 11:24 |
| Задачу опишите. PS И не надо вот это вот разводить: выдергивать фразы из контекста, обобщать... На Земле милион AJAX-разработчиков, и никто не испытывает проблем с асинхронными методами. И вы станете милион первым, как только разберетесь в предмете. |
| Автор: fara86 7.8.2009, 11:30 | ||
Я не спорю с этим, но шас не могу разобраться, не до понимаю, вот и прибегаю к помощи из вне=) суть такая к примеру из базы дергается нащвание времени года, затем на основе результата дергаются месеца относящиеся ко времени года и нужно это отобразить но получается чушь смотрите первое сообщение как мне нужно! |
| Автор: andyhomes 7.8.2009, 12:55 | ||
Это что, курсовая/тестовая работа? Если нет, то предлагаю переместиться на уровень выше (в описании задачи)... А то, похоже, мы имеем дело с какой-то кривой и тупиковой веткой возможных решений неизвестной нам (кроме вас) задачи. Ну, а если да... Заведите переменную, например, idx - содержит индекс обрабатываемого элемента массива сезонов. Получив сезоны вызываете функцию получения месяцев для первого элемента массива сезонов (idx=0) Получив месяцы, в колбек-методе делаете вывод информации, инкремент idx и новый вызов получения месяцев... Ну, естественно, нужно проверять границы индекса. |
| Автор: fara86 7.8.2009, 13:15 | ||
| Вроде нормальный примерчик=) ладно тогда вот такой вот
сначало происходит return res а потом уже тока ответ приходит, каким образом сделать чтоб не выполнялся return res пока не придет ответ от сервера? Может не rpc использовать, а другое чтонить? |
| Автор: fara86 11.8.2009, 07:42 |
| Ну что ни кто не сталкивался с подобными проблемами? |
| Автор: andyhomes 11.8.2009, 08:32 |
Это не проблемы... Попробуйте думать в ключе функциональности приложения, а не метода. |
| Автор: fara86 11.8.2009, 08:54 |
andyhomes да нет это проблемка,и ее как то можно решить изящно раз нет синхронных вызовов, ислиб были бы и те и те то проблем не было бы!выше описанный Вами вариант тоже не подходит=)тут что то надо другое! |