【问题标题】:Not able to access value of variable derived from google distance matrix function无法访问从谷歌距离矩阵函数派生的变量的值
【发布时间】:2019-11-12 08:09:21
【问题描述】:

我正在使用 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】:

    这是预期的行为。 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();
    

    【讨论】:

    • 感谢您的回复,但我想要此回调函数之外的距离值。有什么办法可以得到这个。
    • 是的,有一个解决方法。让我更新答案。
    猜你喜欢
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多