Javascript始终返回XMLHttpRequest

时间:2019-05-25 16:41:46

标签: javascript xmlhttprequest

我向路由服务发送请求,该服务将路由摘要作为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..]。我考虑过使用回调,但是并没有诚实地在这里弄清楚如何使用它。有什么建议吗?

0 个答案:

没有答案