抱歉,我不知道如何以更好的方式写标题。
我目前有一个带有此功能的打字稿文件:
getCurrentPosition(){
this.geolocation.getCurrentPosition().then((resp) => {
this.lat = Math.random()*10;
this.lng = resp.coords.longitude;
return {lat: this.lat, lng: this.lng}
}).catch((error) => {
console.log('Error getting location', error);
});
// return {lat: this.lat, lng: this.lng}
}
如果我调用getCurrentPosition(),我会收到一个未定义的值。 如果我在一段时间后第二次尝试调用它,它会返回一个值(这是之前计算的值)
如何在返回任何值之前等待地理位置的响应?
抱歉这个愚蠢的问题,但我已经花了很多时间来解决这个问题!
答案 0 :(得分:1)
如果你正在使用TypeScript(我假设你提到了Ionic),你可以这样做:
async getCurrentPosition(){
const resp = await this.geolocation.getCurrentPosition()
this.lat = Math.random()*10;
this.lng = resp.coords.longitude;
return {lat: this.lat, lng: this.lng}
}
我建议您使用async/await(tutorial)来简化基于Promise的异步代码。
代码段返回一个解析为{lat: this.lat, lng: this.lng}
的Promise。通过使用await getCurrentPosition()
调用该函数,它将自动解析承诺的值。
一旦你得到这个想法,它可能会有点混乱,它很棒(检查教程链接)。
答案 1 :(得分:0)
您遇到的问题是因为getCurrentPosition()
正在异步评估this.geolocation.getCurrentPosition
方法,因此return语句只是立即执行并返回一个lat
和{{}的对象1}}在其中未定义(如果执行注释掉的代码)。
您要做的是返回lng
而不是简单地执行它并在您的班级上设置属性。
this.geolocation.getCurrentPosition()
然后您可以按如下方式执行:
getCurrentPosition(){
return this.geolocation.getCurrentPosition().then(resp => {
const lat = Math.random()*10;
const lng = resp.coords.longitude;
return {lat: lat, lng: lng}
}).catch(err => {
console.log('Error getting location', error);
});
}
我希望有所帮助!