Сделал вот так, думаю можно лучше, но не придумал как:
/* =========== Прокладываем самый быстрый маршрут до ближайшего магазина =========== */
var routes_array = [];
//Проходимся по каждому маршруту и добавляем их в массив routes_array
var PromiseRoute = new Promise(function (resolve, reject) {
var test;
getRouteLength(startPoint, destPoint, 'auto').then(
result => {
console.log("Fulfilled: " + result);
//routes_array.push(result);
routes_array.push(result);
resolve(routes_array);
}
);
}).then(function (result) {
console.log(result);
return getRouteLength(startPoint, destPoint, 'masstransit').then(
result => {
console.log("Fulfilled: " + result);
//routes_array.push(result);
routes_array.push(result);
return routes_array;
}
);
}).then(function (result) {
console.log(result);
return getRouteLength(startPoint, destPoint, 'pedestrian').then(
result => {
console.log("Fulfilled: " + result);
routes_array.push(result);
return routes_array;
}
);
});
var FastestRouteTime,
FastestRouteLength,
FastestRouteTimeText,
FastestRouteLengthText;
//Смотрим обобщенный результат
PromiseRoute.then(
result => {
FastestRoute = result[0].Route;
FastestRouteTime = result[0].RouteTime;
FastestRouteLength = result[0].RouteLength;
FastestRouteTimeText = result[0].RouteTimeText;
FastestRouteLengthText = result[0].RouteLengthText;
for (var i = 0, l = result.length; i < l; i++) {
//Ищем самый быстрый маршрут
if (result[i].RouteTime > 0 && result[i].RouteTime < result[0].RouteTime) {
FastestRoute = result[i].Route;
FastestRouteTimeText = result[i].RouteTimeText;
FastestRouteLengthText = result[i].RouteLengthText;
}
}
console.log('FastestRouteTime: ', FastestRouteTime);
console.log('FastestRouteLength: ', FastestRouteLength);
$('#route-time').html(FastestRouteTimeText);
$('#route-length').html(FastestRouteLengthText);
myMap.geoObjects.add(FastestRoute); //Добавляем самый быстрый маршрут
}
);
/* =========== Прокладываем самый быстрый маршрут до ближайшего магазина =========== */
/* =========== Функция для поиска самого быстрого маршрута до ближайшего магазина =========== */
function getRouteLength(startPoint, destPoint, rMode) {
multiRoute = new ymaps.multiRouter.MultiRoute({
referencePoints: [
startPoint,
destPoint
],
params: {
routingMode: rMode,
avoidTrafficJams: true,
results: 1,
}
}, {
// Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком.
boundsAutoApply: true
});
return new Promise(function (resolve, reject) {
multiRoute.model.events.add("requestsuccess", function () {
var routes = multiRoute.model.getRoutes();
var minLength = -1;
var routeLength = -1;
var routeTime = -1;
var routeLengthText;
var routeTimeText;
for (var i = 0, l = routes.length; i < l; i++) {
//let routeLength = multiRoute.model.getRoutes().properties.get('distance').value / 1000;
routeLength = routes[i].properties.get("distance").value;
routeLengthText = routes[i].properties.get("distance").text;
routeTime = routes[i].properties.get("durationInTraffic").value;
routeTimeText = routes[i].properties.get("durationInTraffic").text;
if (minLength < 0 || routeLength < minLength) {
minLength = routeLength;
}
console.log("Длина маршрута " + (i + 1) + ": " + routes[i].properties.get("distance").text);
console.log(routeLengthText);
console.log("Время маршрута " + (i + 1) + ": " + routes[i].properties.get("durationInTraffic").text);
console.log(routeTimeText);
}
resolve({
Route: multiRoute,
RouteTime: routeTime,
RouteLength: routeLength,
RouteLengthText: routeLengthText,
RouteTimeText: routeTimeText,
});
});
});
}
/* =========== ! Функция для поиска самого быстрого маршрута до ближайшего магазина =========== */