JavaScript:返回函数中未定义的变量
在本教程的帮助下,我编写了一个使用谷歌地图对地址进行地理编码的函数。我希望函数返回任意给定地址的坐标。最后,我希望编写一个脚本,在地址数组上循环,并以JavaScript:返回函数中未定义的变量,javascript,Javascript,在本教程的帮助下,我编写了一个使用谷歌地图对地址进行地理编码的函数。我希望函数返回任意给定地址的坐标。最后,我希望编写一个脚本,在地址数组上循环,并以[lat,lng]的形式返回它们的坐标数组 然而,在我们讨论fast之前,这个问题只是关于返回一个值。请看下面的脚本 该函数起作用。例如,如果我调用geocode('newyork')并在函数中启用console.log(latlng),它会正确地记录[40.7127753,-74.0059728]。但是,如果我调用函数指定一个变量,如var co
[lat,lng]
的形式返回它们的坐标数组
然而,在我们讨论fast之前,这个问题只是关于返回一个值。请看下面的脚本
该函数起作用。例如,如果我调用geocode('newyork')
并在函数中启用console.log(latlng)
,它会正确地记录[40.7127753,-74.0059728]
。但是,如果我调用函数指定一个变量,如var coord\u address\u 1=geocode(“纽约”)
,则此变量未定义。我做错了什么?我已经阅读了这些帖子,并得出结论,这可能与我希望在分配之前返回latlng
有关。然而,由于我是JS新手,我并不真正理解如何避免这种情况。我尝试了。然后(函数(latlng){return latlng;})
和回调(latlng)代码>但也没有运气(ReferenceError:callback未定义
)
功能地理编码(地址){
axios
.get(“https://maps.googleapis.com/maps/api/geocode/json", {
参数:{
地址:地址:,
密钥:“API_密钥”
}
})
.然后(功能(响应){
//以所需格式创建变量
var latlng=
"[" +
[
response.data.results[0].geometry.location.lat,
response.data.results[0].geometry.location.lng
] +
"]";
//这很有效
//控制台日志(latlng);
返回板条;
})
.catch(函数(错误){
console.log(错误);
});
}
var coord_address_1=地理编码(“纽约”);
console.log(坐标地址1);//未定义
当使用时,由于.then()
在技术上是一种承诺的方法,因此方法内部的任何返回实际上都是为.then()
方法返回的,而不是外部的函数
其他人也有类似的问题
如果要从函数返回值,则必须使return语句位于promise的.then()
或.catch()方法之外
你需要考虑的另一件事是,承诺将不会立即返回,因为它是异步的,
这个问题()确实是要走的路。你的可能会被关闭,因为它是重复的,这是完全相同的问题。几乎每个学习JS和异步的人都会问这个问题。要么返回承诺,要么传入回调并用值调用。基本上,不是将值返回为零(死胡同)的return latlng
,而是将值传递给另一个函数doSomethingWith(latlng)
想象一下geocode(“纽约”)
需要3秒钟。Javascript是非阻塞的,这意味着它不会在等待答案的3秒钟内阻塞整个脚本。它立即跳转到下一行console.log()
,该行记录未定义的内容,因为上面的指令远未完成。它将在3秒钟内完成,您将在.then()
中获得结果。返回值没有任何作用,太晚了。你需要把它传下去。欢迎使用异步:)好的,伙计们,谢谢你们的快速回复!我还要试着理解异步:)所以它不像在第一个.then()
和.catch()之间添加那么简单。然后(函数(latlng){return latlng;})
?