Ожидание завершения цикла перед чтением нижних кодов - PullRequest
0 голосов
/ 29 апреля 2019

Как и в заголовке, читается нижний код, даже если цикл вверху еще не закончен.

Когда вы смотрите в консоль, «строки» на расстоянии [$ x].row [0] .elements [0] .distance.text еще не определен, потому что метод push еще не действует.

Кстати, это событие вызывается после щелчка события, поэтому при первом щелчке в массиве ничего не будет, но при втором щелчке он будет работать так, как я хотел.

iЯ уже пытался использовать обещание и ожидание, но все еще то же самое.

var distanceService = new google.maps.DistanceMatrixService;

for($z=0;$z<ppos.length;$z++){
  distanceService.getDistanceMatrix({
      origins: [pos],
      destinations: [ppos[$z]],
      travelMode: 'DRIVING',
    },
    function (response, status) {
      if (status != google.maps.DistanceMatrixStatus.OK) {
        console.log('Error:', status);
      } else {
        console.log(response);
        distance.push(response);
      }
    }
  );
}

var content="";

if(distance.length>0){
  for($x=0;$x<3;$x++){
    content+='<div class="row"><div class="col-lg-12"><h4><strong>'+plists[$x].name+'</strong></h4><p><em>Address:'+plists[$x].vicinity+'</em></p><p><em>Distance:'+distance[$x].rows[0].elements[0].distance.text+'</em></p></div></div>';
  }
}

Что мне нужно, так это то, что значения должны быть помещены в массив расстояний, прежде чем читать нижние коды.

1 Ответ

0 голосов
/ 29 апреля 2019

Проверка последнего цикла перед получением расстояний, асинхронные вызовы , вызываемые для циклов , но цикл не ожидает их ответов :

var res = 0;
var distanceService = new google.maps.DistanceMatrixService();
    for ($z = 0; $z < ppos.length; $z++) {
        distanceService.getDistanceMatrix(
            {
                origins: [pos],
                destinations: [ppos[$z]],
                travelMode: "DRIVING"
            },
            function(response, status) {
                // Response has arrived!
                res ++;
                if (status != google.maps.DistanceMatrixStatus.OK) {
                    console.log("Error:", status);
                } else {
                    console.log(response);
                    distance.push(response);
                    // If it is the last loop...
                    if(res === ppos.length) {
                       getDistance();
                    }
                }
            }
        );
    }

    var content = "";

    function getDistance() {
        if (distance.length > 0) {
            for ($x = 0; $x < 3; $x++) {
                content +=
                    '<div class="row"><div class="col-lg-12"><h4><strong>' +
                    plists[$x].name +
                    "</strong></h4><p><em>Address:" +
                    plists[$x].vicinity +
                    "</em></p><p><em>Distance:" +
                    distance[$x].rows[0].elements[0].distance.text +
                    "</em></p></div></div>";
            }
        }
    }
...