Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема асинхроности (https://javascript.ru/forum/misc/4327-problema-asinkhronosti.html)

AntonE 11.07.2009 20:01

Проблема асинхроности
 
Здраствуйте.
Подскажите, пожалуйста, вот если мы посылаем асинхронный запрос, то остальной код дальше выполняется и не ждет ответа - ведь на то он и асинхронный, но как в таком случае быть, если нужно дождаться ответа?
Сразу хочу добавить: синхронный запрос я не могу послать, т.к. это гуглевская функция и по докам я не нашел, чтобы можно было включить синхронный вызов; и мне нужен именно асинхронный запрос, т.к. пока ответ не пришел, у меня еще загружаются другие данные.
По началу я сделал примерно так:
// создаем новый объект и запрашиваем асинх. запросом xml-данные
var street = new Street.load('data.xml')
// дальше выполняем необходимые настройки
// в функции init запускается setInterval, который проверяет,
// загрузились ли xml-данные, и когда все ок,
// выполняем запуск функции, которая передана
street.init(function() {
  // выполняем безопасно тут код, т.к. все данные уже загружены
});

Это работает, но не удобно и не подходит.
Можно ли как-нибудь работать в таком духе? (не боясь, что данные не подгрузились):
var obj = new Obj();
var street = new Street.load('street.xml')
obj.addOverlay(street.get(['Ленина', 'Строителей', 'Урицкого']))
var home = new Home.load('home.xml')
obj.addOverlay(home.get({ 'Труда': [11, 23, 46] }))
var area = new Area.load('area.xml')
obj.addOverlay(area.get(['network', 'tv']))

Или единственный путь - синхронные запросы? (в данном случае на загрузку xml)

AntonE 12.07.2009 13:27

Никто не поможет? Или не понятно про что я спрашиваю?

Dmitry A. Soshnikov 12.07.2009 14:45

В каждой асинхронной системе, должна действовать система callback'ов (функций обратного вызова, которые определяются и передаются параметром в асинхронный вызов; далее, эта функция вызовется в нужный момент). Другим способом может быть система нотификаций событий - подписываетесь на нужное событие, а система, которая рассылает эти события, сообщит Вам об этом в нужное время.

Посмотрите подробней документацию по объектам которые Вы используете. Я думаю, система callback'ов там должна быть (например, в методах .load).

gosha_kap 15.07.2009 05:56

А что если попробовать через объект XMLHTTPRequest делать асинхронный запрос

Riim 15.07.2009 06:38

Цитата:

Сообщение от gosha_kap
А что если попробовать через объект XMLHTTPRequest делать асинхронный запрос

Там так и делается.


Часовой пояс GMT +3, время: 06:58.