【问题标题】:returned value from a callback function回调函数的返回值
【发布时间】:2019-10-03 15:32:28
【问题描述】:

我在通过回调函数获取返回值时遇到了一些麻烦(“dist”=未定义).....我已经尝试获取该值很多次但仍然未定义。但是,我可以从控制台获取它....请有人帮忙!!

calculateDistance = (place, me) => {
        var origin = new window.google.maps.LatLng(
          parseFloat(place.latitude)
          parseFloat(place.longitude)
        );

        var destination = new window.google.maps.LatLng(
          parseFloat(me.latitude),
          parseFloat(me.longitude)
        );

        var service = new window.google.maps.DistanceMatrixService();
        service.getDistanceMatrix(
          {
            origins: [origin],
            destinations: [destination],
            travelMode: window.google.maps.TravelMode.DRIVING,
            avoidHighways: false,
            avoidTolls: false,
            unitSystem: window.google.maps.UnitSystem.metric
          },
          function(response, status) {
            if (
              status === "OK" &&
              response.rows[0].elements[0].status !== "ZERO_RESULTS"
            ) {
              let dist = parseFloat(response.rows[0].elements[0].distance.text);
              return dist;
            } else {
              alert("Error: " + status.toString());
            }
          }
        );
      };

【问题讨论】:

  • 你试过控制台记录整个对象吗?例如。 add console.log('response: ', response) ...after this line: let dist = parseFloat(response.rows[0].elements[0].distance.text);` 然后您可以在控制台中展开响应对象以确保该值存在于对象中。

标签: reactjs callback frontend google-distancematrix-api distance-matrix


【解决方案1】:

您不能强制 Google 的函数返回您的回调值,因此您能做的最好的事情就是从您的回调中调用另一个函数。

const setDist = (dist) => {
   //persist your dist somehow, maybe setState?
   this.setState({distance: dist});
}

service.getDistanceMatrix(
      {
        origins: [origin],
        destinations: [destination],
        travelMode: window.google.maps.TravelMode.DRIVING,
        avoidHighways: false,
        avoidTolls: false,
        unitSystem: window.google.maps.UnitSystem.metric
      },
      function(response, status) {
        if (
          status === "OK" &&
          response.rows[0].elements[0].status !== "ZERO_RESULTS"
        ) {
          let dist = parseFloat(response.rows[0].elements[0].distance.text);
          setDist(dist);
        } else {
          alert("Error: " + status.toString());
        }
      }
    );

【讨论】:

  • 嘿伙计!!这不起作用....当我控制台记录 this.state.distance 它未定义时,我无法调用回调函数中的 setDist 函数 ==>。
  • 你能控制台记录函数本身吗?在setDist(dist)console_log(setDist) 之后。我很好奇它是否被定义。这个calculateDistance 在哪里?它在您的类组件中吗?还是你要导入?
  • 你好!我在我的类组件中调用 calculateDistance 虽然我想返回 setDist(dist) 的值我不想将函数值显示到控制台,因为我已经完成了。谢谢布赖恩
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
相关资源
最近更新 更多