Что-то типа семафоров на 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, время: 05:29. |