无法访问从Google距离矩阵函数派生的变量的值

问题描述 投票:1回答:1

我正在使用Google距离矩阵api获取两个位置之间的距离。我全局声明了一个变量。更改了该变量的功能。但是通常情况下,调用函数后,我应该能够访问此更改的变量值。但是现在我无法访问变量的更改值。我的代码是:

var distance = require('google-distance-matrix');

var origins = ['San Francisco CA'];
var destinations = ['New York NY'];

distance.key('My API key');
distance.units('imperial');
// my global variabel
let ourdistance;

function getdistance(){ distance.matrix(origins, destinations, function (err, distances) {
     for (var i=0; i < origins.length; i++) {
            for (var j = 0; j < destinations.length; j++) {
                var origin = distances.origin_addresses[i];
                var destination = distances.destination_addresses[j];
                if (distances.rows[0].elements[j].status == 'OK') {
                    var distance = distances.rows[i].elements[j].distance.text;
                    console.log("This is the distance covered "+ distance);
                    //changing global variable value inside function
                    ourdistance=distance}}}});}

// calling function                    
getdistance();

console.log("finale distance is "+ ourdistance);

我得到的结果是:----“最终距离未定义”“这是覆盖的距离2,903英里”

现在,我不知道为什么“这是2,903英里的距离”是第一个出现的原因,为什么我无法获得变量的更改后的值

javascript node.js google-distancematrix-api distance-matrix
1个回答
0
投票

这是预期的行为。 console.log("finale distance is "+ ourdistance);完成之前正在执行getdistance()。因此,您必须在回调内单击console.log

示例:

async function main() {
  const util = require('util');
  const matrix = util.promisify(distance.matrix);

  async function getdistance() {
    let ourdistance;
    const distances = await matrix(origins, destinations);
    for (var i = 0; i < origins.length; i++) {
      for (var j = 0; j < destinations.length; j++) {
        var origin = distances.origin_addresses[i];
        var destination = distances.destination_addresses[j];
        if (distances.rows[0].elements[j].status == 'OK') {
          var distance = distances.rows[i].elements[j].distance.text;
          console.log("This is the distance covered " + distance);
          ourdistance = distance
        }
      }
    }

    return ourdistance;
  }

  // calling function                    
  let ourdistance = await getdistance();

  console.log("finale distance is " + ourdistance);
}

main();
© www.soinside.com 2019 - 2024. All rights reserved.