javascript - 警报在 getPosition 函数结束之前打开
问题描述
getPosition() 是一个可以让我们找到位置的函数,问题是警报在函数结束之前出现,第一次警报为空,然后我可以获取值
<input type="button" value="test" onClick="test()">
<script>
var coordinates = {latitude: null, longitude: null, error: false}
function test(){
getPosition();
alert(coordinates.latitude);
}
function getPosition() {
navigator.geolocation.getCurrentPosition(success, fail);
function success (pos) {
coordinates.latitude = pos.coords.latitude;
coordinates.longitude = pos.coords.longitude;
}
function fail(error){
coordinates.error = true;
}
}
</script>
解决方案
您必须让警报等待来自 的响应navigator.geolocation.getCurrentPosition
。
为此,您可以使用 async/await,如下所示:
<input type="button" value="test" onClick="test()">
<script>
var coordinates = {latitude: null, longitude: null, error: false}
async function test(){
try {
const result = await getPosition();
alert(coordinates.latitude);
} catch(error) {
alert("Error getting coordinates");
}
}
async function getPosition() {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(success, fail);
function success (pos) {
coordinates.latitude = pos.coords.latitude;
coordinates.longitude = pos.coords.longitude;
resolve();
}
function fail(error){
coordinates.error = true;
reject(error);
}
});
}
</script>
或继续使用回调,如下所示:
<input type="button" value="test" onClick="test()">
<script>
var coordinates = {latitude: null, longitude: null, error: false}
function test(){
getPosition();
}
function getPosition() {
navigator.geolocation.getCurrentPosition(success, fail);
function success (pos) {
coordinates.latitude = pos.coords.latitude;
coordinates.longitude = pos.coords.longitude;
alert(coordinates.latitude);
}
function fail(error){
coordinates.error = true;
alert("Error getting coordinates");
}
}
</script>
推荐阅读
- sql-server - 如何在不知道参数数据类型的情况下添加存储过程参数?
- java - 如何从 URL 访问我的应用程序中的 JSON 数据?
- javascript - Angular 6:检查主机/服务器的可用性
- c# - 如何在 C# 控制台应用程序中显示特别是运行应用程序的进程列表
- javascript - 将任何字符串格式化为税号格式
- python-3.x - 在 Pandas 的 groupby 上使用 lambda 函数时的奇怪行为
- java - 如何通过单击 FAB 按钮获取 id
- ruby-on-rails - 如何通过切换将特定 id 传递给 Bootstrap Modal
- java - 我们如何在 spring 集成中更改通道数据类型?
- java - 动态生成java bean