Проблема асинхроности
Здраствуйте.
Подскажите, пожалуйста, вот если мы посылаем асинхронный запрос, то остальной код дальше выполняется и не ждет ответа - ведь на то он и асинхронный, но как в таком случае быть, если нужно дождаться ответа? Сразу хочу добавить: синхронный запрос я не могу послать, т.к. это гуглевская функция и по докам я не нашел, чтобы можно было включить синхронный вызов; и мне нужен именно асинхронный запрос, т.к. пока ответ не пришел, у меня еще загружаются другие данные. По началу я сделал примерно так: // создаем новый объект и запрашиваем асинх. запросом 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, время: 06:58. |