私はちょっとjavascriptに新しく、私はビルドしているウェブサイトで問題に遭遇しました。少しの文脈:私はリーフレットマップを持っています、その地図上には複数の車両があります。地図上に新しいマーカーを置くと、そのマーカーとすでに持っている30台の車両との間のすべてのルートを計算する必要があります。それから、その配列をとり、最短距離で並べ替える必要があります。 私は約束を簡単に見ましたが、それがうまく動作することは決してありませんでした。リーフレットルーティング、複数の起点を持つ最短ルート
var get_all_routes = function(){
var promise = new Promise(function(resolve,reject){
var rutas = [];
for(var i = 0;i<Object.keys(puntos).length;i++){
get_route(ambulance[i]).then(function(response){
rutas.push(response);
});
}
resolve(rutas);
});
return promise;
}
救急車は地図上のすべての車両の位置を持つグローバルアレイです。
function get_route(punto){
return new Promise(function(resolve,reject){
var waypoints = [
L.Routing.waypoint(L.latLng(feature.getLatLng().lat, feature.getLatLng().lng)),
L.Routing.waypoint(L.latLng(punto.getLatLng().lat,punto.getLatLng().lng)),
];
var router = new L.routing.osrmv1({});
router.route(waypoints, function(error, routes) {
if(error==null){
resolve(routes[0]);
}else
resolve('No route available');
}, null, {});
});
}
フィーチャはマップ上に配置された新しいマーカーです。
var sort_cars = function(rutas) {
var promise = new Promise(function(resolve,reject){
rutas.sort(function(a, b){return a.summary.totalDistance-
b.summary.totalDistance});
resolve(rutas);
});
return promise;
}
合計距離に基づいてソートします。
get_all_routes().then(function(resolve){
window.setTimeout(function() {sort_cars(resolve).then(function(resolve){
routes = resolve;
other_func()
.then(other_func2(routes));
})}, 3000);
});
((other_func)とother_func2)非重要なものを行う:
そして、これは私がこれを呼び出す方法です。それができない限り、これは動作しています。タイムアウトが3秒であるため、ルーティングエージェントがすべてのルートを取得するためにそれ以上の時間を要した場合、すべての地獄が緩んでしまいます。
私が必要とするのは、sort_cars()関数がすべてのルートを準備するまで待つことです。助けてください!