Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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 - Fatal编程技术网

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;})