Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.05.2012, 13:01
Новичок на форуме
Отправить личное сообщение для mkraer Посмотреть профиль Найти все сообщения от mkraer
 
Регистрация: 07.05.2012
Сообщений: 3

Что-то типа семафоров на javascript
Была поставлена задача - посчитать длину пути из одного города в другой по версии яндекс.карт и гугл.карт и . Это выполнено. Теперь заказчик просит добавить вычисление среднего значения. И вот тут загвоздка - ведь яндекс.карты и гугл.карты возвращают посчитанный путь асинхронно. Как поймать момент, когда и яндекс и гугл закончили работу?
Ответить с цитированием
  #2 (permalink)  
Старый 07.05.2012, 15:47
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Среднего значения чего?
Ответить с цитированием
  #3 (permalink)  
Старый 07.05.2012, 20:30
Новичок на форуме
Отправить личное сообщение для mkraer Посмотреть профиль Найти все сообщения от mkraer
 
Регистрация: 07.05.2012
Сообщений: 3

Среднее между путём по яндексу и гуглу. Придумал решение, как сделать, чтоб пути считались по очереди, но всё же интересно, есть возможность оставить асинхронный подсчёт путей?
Ответить с цитированием
  #4 (permalink)  
Старый 07.05.2012, 20:50
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

создаёте замыкание:
(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 ); // <--- сюда передаёте её как аргумент.
Ответить с цитированием
  #5 (permalink)  
Старый 07.05.2012, 20:55
Новичок на форуме
Отправить личное сообщение для mkraer Посмотреть профиль Найти все сообщения от mkraer
 
Регистрация: 07.05.2012
Сообщений: 3

Спасибо!
Ответить с цитированием
  #6 (permalink)  
Старый 08.05.2012, 00:18
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Если вы используете 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);//Это вставляем в обработчике гугла, когда уже известен его путь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Баги Opera пишем сюда devote Оффтопик 101 08.08.2013 05:56
Что я хочу от JavaScript? CyberMaster Библиотеки/Тулкиты/Фреймворки 53 12.02.2012 22:31
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Как (эффективно) изучать JavaScript? JSTalker Общие вопросы Javascript 33 23.12.2010 03:13
Грамотный javascript front-end разработчик Илья Кантор Работа 1 13.03.2010 22:20