Проблема асинхроности
Здраствуйте.
Подскажите, пожалуйста, вот если мы посылаем асинхронный запрос, то остальной код дальше выполняется и не ждет ответа - ведь на то он и асинхронный, но как в таком случае быть, если нужно дождаться ответа? Сразу хочу добавить: синхронный запрос я не могу послать, т.к. это гуглевская функция и по докам я не нашел, чтобы можно было включить синхронный вызов; и мне нужен именно асинхронный запрос, т.к. пока ответ не пришел, у меня еще загружаются другие данные. По началу я сделал примерно так:
// создаем новый объект и запрашиваем асинх. запросом 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) |
Никто не поможет? Или не понятно про что я спрашиваю?
|
В каждой асинхронной системе, должна действовать система callback'ов (функций обратного вызова, которые определяются и передаются параметром в асинхронный вызов; далее, эта функция вызовется в нужный момент). Другим способом может быть система нотификаций событий - подписываетесь на нужное событие, а система, которая рассылает эти события, сообщит Вам об этом в нужное время.
Посмотрите подробней документацию по объектам которые Вы используете. Я думаю, система callback'ов там должна быть (например, в методах .load). |
А что если попробовать через объект XMLHTTPRequest делать асинхронный запрос
|
Цитата:
|
| Часовой пояс GMT +3, время: 22:23. |