ReactJS:无法从函数中获取数据

时间:2018-03-23 03:11:44

标签: javascript reactjs function

我目前无法访问函数中的值,但这是一个承诺。

这是我的代码:

 service.getDistanceMatrix({
        origins: ["Waterloo ON"],
        destinations: destination,
        travelMode: 'DRIVING',
        avoidHighways: false,
        avoidTolls: false
      }, function(response, status){
       if (status == 'OK') {
         var origins = response.originAddresses;
         var destinations = response.destinationAddresses;

         for (var i = 0; i < origins.length; i++) {
           var results = response.rows[i].elements;
           for (var j = 0; j < results.length; j++) {
             var element = results[j];
             var distance = element.distance.text;
             var duration = element.duration.text;
             var from = origins[i];
             var to = destinations[j];
             // _this.
             // console.log(distance);
             location.distFinal = distance;

             location.setState({
               dist: distance
             })
             // return distance;
             // return distance;
             // console.dir(distance)
             // tryA = distance;
           }
         }

       }
     })
     console.dir(location);
     console.dir(location.distFinal);

我正在尝试访问距离所以我做了console.dir(location.distFinal),但它给了我一个未定义的值。但是,当我执行console.dir(location)时,它给了我带有distFinal的对象作为值....

这就是我的意思:

enter image description here

第126行是console.dir(位置),第127行是console.dir(location.distFinal)

请!我只是希望能够提取距离!

1 个答案:

答案 0 :(得分:1)

目前还没有承诺,所以尝试将转换为承诺 - 这样一旦异步代码拥有您想要的数据,您就可以解决这个问题。然后,您可以.then承诺在解决后运行代码。

&#13;
&#13;
//  location is defined somewhere up here
new Promise((resolve, reject) => {
  service.getDistanceMatrix({
    origins: ["Waterloo ON"],
    destinations: destination,
    travelMode: 'DRIVING',
    avoidHighways: false,
    avoidTolls: false
  }, function(response, status){
    if (status == 'OK') {
      var origins = response.originAddresses;
      var destinations = response.destinationAddresses;

      for (var i = 0; i < origins.length; i++) {
        var results = response.rows[i].elements;
        for (var j = 0; j < results.length; j++) {
          var element = results[j];
          var distance = element.distance.text;
          var duration = element.duration.text;
          var from = origins[i];
          var to = destinations[j];
          // _this.
          // console.log(distance);
          location.distFinal = distance;

          location.setState({
            dist: distance
          })
          // return distance;
          // return distance;
          // console.dir(distance)
          // tryA = distance;
        }
      }
      // looping is done
      resolve();
    }
  })
}).then(() => {
  console.dir(location);
  console.dir(location.distFinal);
});
&#13;
&#13;
&#13;

console.dir的原因是因为Chrome的控制台在您打开控制台时请求对象的状态,而不是显示对象的状态因为它是