Что-то типа семафоров на javascript
Была поставлена задача - посчитать длину пути из одного города в другой по версии яндекс.карт и гугл.карт и . Это выполнено. Теперь заказчик просит добавить вычисление среднего значения. И вот тут загвоздка - ведь яндекс.карты и гугл.карты возвращают посчитанный путь асинхронно. Как поймать момент, когда и яндекс и гугл закончили работу?
|
Среднего значения чего?
|
Среднее между путём по яндексу и гуглу. Придумал решение, как сделать, чтоб пути считались по очереди, но всё же интересно, есть возможность оставить асинхронный подсчёт путей?
|
создаёте замыкание:
(function(){
// код
})();
там размещаете две переменные, в которых будет храниться результат, и где-нибудь на внешней стороне функцию, которая будет обрабатывать два пришедших результата:
// считаем\выводим\ делаем что хотим с двумя пришедшими результатами
var count = function(goog, ya){
var average = ((goog + ya) / 2).toFixed(3);
alert(average);
};
(function(callback){
var goog, ya; // пришедшие результаты
goog.onLoad(function(request){ // <--- обработчик пришедшего результата для гугла
goog = request.data; // запоминаем значение
if(ya){ // и от яндекса уже пришел результат
callback(goog, ya);
}
});
YMaps.addEventListener("load", function(e){ // <--- обработчик результата от яндекса
ya = e.result; // запоминаем в переменной.
if(goog){ // от гугла уже пришел результат
callback(goog, ya);
}
});
})( count ); // <--- сюда передаёте её как аргумент.
|
Спасибо!
|
Если вы используете jQuery, то вы можете использовать Deferred
var q = jQuery.Deferred();
var w = jQuery.Deferred();
jQuery.when(q,w).then(function(a,b){
//будет вызвано, когда известны результаты вычисления q и w(обоих)
console.log(a,b);//123 456
});
q.resolve(123);//Это вставляем в обработчике яндекса, когда уже известен его путь
w.resolve(456);//Это вставляем в обработчике гугла, когда уже известен его путь
|
| Часовой пояс GMT +3, время: 21:39. |