Клуб API Карт

Расчет длин маршрутов от одной точки до нескольких

ZeKKKKa
31 мая 2014, 14:55

На входе есть точка myPointRoot и массив точек myPoints
На выходе нужен массив myLenghts с расстояниями до них

route - асинхронная функция. В случае с одним, заранее известным маршрутом можно написать просто

 

 ymaps.route(coord).then(
    function (route) {
        var returnVal = route.getLength();
    // обрабатываем расстояние

    },
    function (error) {
        alert("Возникла ошибка: " + error.message);
    }
);

 
 Если точек несколько:

myRootPoint = [55.4,33.7];
myPoints = [
    [55.4, 33.0],
    [45.2, 53.7],
    [85.3, 23.7],
    [55.9, 73.7]
];

var promiseArray = [];

for(var i = 0; i<myPoints.length; i++) {
    var coor = [myRootPoint, myPoints[i]];
    promiseArray.push(ymaps.route(myCoor));  // добавляем рассчет маршрута в массив обещаний
}
/* И вот тут в конце нужна какая-то функция, которая сработает сразу после того, как все promise перейдут в состояние "onFulfilled" */

 

Если используются JQuery-defered.promise объекты, можно писать так

 

$.when.apply($, promiseArray).then(function(){
    //все элементы promiseArray перешли в состояние resolved!
});




Есть ли аналог для wow.promise?

3 комментария
Подписаться на комментарии к посту

http://dfilatov.github.io/vow/

 

vow.all(_array_of_promises_)

   .done(function (_array_of_results_) {

        ...

    });

Я вас люблю!

 

Еще если можно, скажите, я правильно сформировал логику работы приложения? Нужно делать массив обещаний, или это "костыль"?

Если ответ есть в какой-нибудь "правильной" книге, просто напишите название, сам найду.

Просто, я по жизни системщик и сейчас смотрю на JS "как на новые ворота"..

А что за сервис у вас? Какую задачу решаете?

Есть ссылка?