javascript - 为什么我的地理编码函数返回未定义?

标签 javascript function return

我正在使用 Google 地理编码 API 对我的地址进行地理编码,从“地址 150,城市”之类的内容到它的纬度和经度。在函数末尾,我尝试返回一个对象,其中包含这两个对象,如下面的代码所示。

我认为问题可能是,编码需要相当长的时间,因为我今天想解决这个问题,但我还没有学习等待和异步与 promise 和东西(我明天会这样做,别担心),我用 setTimeout 代替,但即使我在编码完成后调用 console.log 也没有解决问题。由于我是 JS 新手,所以我只是尝试将其包装到变量中,只是稍微玩了一下代码,但都没有帮助。

            // address
            var address = "Address 156, City"
            function geocode(address) {
                axios.get("https://maps.googleapis.com/maps/api/geocode/json", {
                    params: {
                        address: address,
                        key: "AIzaSyDaXOpbCeLYeRxWXtuSQQEbQzR14PejczM"
                    }
                })
                    .then((response) => {
                        let lngLat = {
                            lat: response.data.results[0].geometry.location.lat,
                            lng: response.data.results[0].geometry.location.lng}
                        console.log(lngLat) // here it shows me my object
                        return lngLat;
                    })
            }
            let geocodedAddress = geocode(address);
            setTimeout(function () { console.log(geocodedAddress); }, 3000);               
        }
    });

最佳答案

您的函数中没有returnthen() 中的 return 不会返回到外部函数。

此外,请求是异步的,因此您需要返回 axios.get Promise 并在调用函数时使用另一个 then() 来访问数据

function geocode(address) {
  // return the promise
  return axios.get("https://maps.googleapis.com/maps/api/geocode/json", {
      params: {
        address: address,
        key: "AIzaSyDaXOpbCeLYeRxWXtuSQQEbQzR14PejczM"
      }
    })
    .then((response) => {
      let lngLat = {
        lat: response.data.results[0].geometry.location.lat,
        lng: response.data.results[0].geometry.location.lng
      };     
      return lngLat;
    });
}

// usage
geocode(address).then(lngLat => {
  console.log(lngLat);
});

关于javascript - 为什么我的地理编码函数返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762364/

相关文章:

javascript - JavaScript 中的 function.toString()

c++ - 具有返回值的函数 (C++)

java - 如何在 Java 中返回一个集合

java - 数组中缺少 return 语句错误

c++ - 返回局部变量的地址与返回局部变量的指针

javascript - div 中的表格是否忽略了最大宽度?

javascript - 将最后一个值添加到 AmCharts Graph 中的图例中

c# - 使用具有可分配 Func 委托(delegate)的对象的基于树的数学表达式

javascript - IF null ELSE - If Else 的正确语法

javascript - 语法错误: missing: after property id