我向路由服务发送请求,该服务将路由摘要作为json返回(航路点,距离,时间等)。我之所以这样做是因为我需要计算多个根并获取它们与数组的距离。我了解JS是异步运行的,如果我发送例如两个请求,我可以比第二个请求更快地得到第二个请求的结果。但是,有什么方法可以使它像“发送请求1,从请求1得到结果,发送请求2,从请求2结果等”一样工作吗?我读过有关设置异步参数false
的信息,但第一步:它不起作用,第二步:如我所见,这不是一个好习惯。这是我的代码:
coords -- array with coordinates like [[lat0, lng0], [lat1, lng1]...]
distances -- array where I want to put distances between points
//function to get summary of one route
function getRoutSummary(i, j) {
var url = 'https://api.mapbox.com/directions/v5/mapbox/driving/' +
coords[i][1] + ',' + coords[i][0] + ';' +
coords[j][1] + ',' + coords[j][0] +
'?geometries=geojson&access_token=my api key';
var req = new XMLHttpRequest();
req.responseType = 'json';
req.open('GET', url, true);
req.onload = function () {
var jsonResponse = req.response;
var distance = jsonResponse.routes[0].distance;
console.log('Distance between ' +
'coords[' + i +'][1]' + ',' + 'coords[' + i + '][0]' + ' and ' +
'coords[' + j +'][1]' + ',' + 'coords[' + j + '][0]' +
' is ' + distance);
distances.push(distance);
};
req.send();
}
//function to get all distances. Console.log just to make me comfortable
function getAllRoutes(){
console.log('Begin getAllRoutes');
for (var i = 0; i < coords.length; i++){
for (var j = 0; j < coords.length; j++){
getRoutSummary(i, j);
}
}
console.log(distances);
}
所以现在如果我有3个点p1,p2,p3,我想按它们之间的距离排列数组:[p1p1, p1p2, p1p3, p2p1, p2p2...]
,但是这段代码始终像[p1p3, p2p1, p3p2..]
一样给我不同的顺序或[p3p3, p2p1..]
。我考虑过使用回调,但是并没有诚实地在这里弄清楚如何使用它。有什么建议吗?