Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的地理编码函数返回未定义?_Javascript_Function_Return - Fatal编程技术网

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

Javascript 为什么我的地理编码函数返回未定义?,javascript,function,return,Javascript,Function,Return,我用谷歌地理编码API对我的地址进行地理编码,从“地址150,城市”到它的纬度和经度。在函数的末尾,我试图返回一个对象,其中包含这两个对象,如下面的代码所示 我认为问题可能是,编码需要相当长的时间,因为我今天想解决这个问题,而且我还没有学会等待和异步承诺之类的东西(我明天会做,别担心),所以我改用了setTimeout,但即使我在编码完成后调用console.log,它也没有解决问题。因为我是JS新手,所以我试着将它包装成变量,只是稍微处理一下代码,但都没用 // add

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

我认为问题可能是,编码需要相当长的时间,因为我今天想解决这个问题,而且我还没有学会等待和异步承诺之类的东西(我明天会做,别担心),所以我改用了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);               
        }
    });

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

此外,请求是异步的,因此您需要返回
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);
});

我无法访问您的全部代码,但解决您的问题的异步/等待方法是:

// address
var address = "Address 156, City"
async function geocode(address) {
  const response = await axios.get("https://maps.googleapis.com/maps/api/geocode/json", {
    params: {
      address: address,
      key: "AIzaSyDaXOpbCeLYeRxWXtuSQQEbQzR14PejczM"
    }
  })

  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 = await geocode(address);
console.log(geocodedAddress);               
}
});

请注意async/await如何允许您编写简单的顺序逻辑来执行异步操作。

只需在调用“return lngLat;”的地方执行实际工作即可“承诺不会返回那样的价值观。”埃文斯·诺尔斯有时我倾向于过于复杂化。感谢您解决我的问题:)需要另一个异步函数来执行
let geocodedAddress=wait geocode(address)
这是真的,但我假设没有理由其他函数也不能是异步的。