Для l oop похоже выходит за указанный предел - PullRequest
1 голос
/ 02 мая 2020

Я написал Javascript код для l oop через массив, включающий информацию о некоторых ресторанах. Когда это применимо, l oop проверяет расстояние между устройством пользователя и рестораном и изменяет объект ресторана в массиве, чтобы включить известное расстояние.

В приведенном ниже коде мы через l oop массив, и если мы определим, что ресторан является цепочкой (ie. у него нет доступных координат), мы пропускаем его. В противном случае мы определяем расстояние между почтовым индексом пользователя и известными координатами ресторана с помощью API Google Maps Javascript.

for (var i = 0; i < restaurantMetadata.length; i++) {
    console.log(i);
    var rst = restaurantMetadata[i];
    if (rst["chain"]) {} else {
        console.log("getting distance");
        var zip = window.localStorage.getItem("zipcode");
        var coords = new google.maps.LatLng(rstLat, rstLon);
        var distanceService = new google.maps.DistanceMatrixService;
        distanceService.getDistanceMatrix({
            origins: [zip],
            destinations: [coords],
            travelMode: "DRIVING"
        }, function(result) {
            restaurantMetadata[i]["distance"] = Math.round(((result.rows[0].elements[0].distance.value) / 1000) * 10)/10;
        });
            }
        } 
    }

Кажется, что расстояние работает нормально, но после ошибки результат получен:

TypeError: restaurantMetadata[i] is undefined

Запись i на консоль, как показано в строке 2 выше, показывает 0 1 2 3 как следует, но позже, когда я регистрирую его в теле результата, он получает целых четыре, но дважды подряд. Есть ли причина для такого поведения? Сначала я подумал, что, может быть, i каким-то образом меняется, но я не могу найти причину для этого.

...