我正在调用该函数来获取lat长的距离,但是它返回的是未定义的。
onCollectionUpdate = (querySnapshot) => {
const distance = this.getDistance(latitude, longitude)
console.log('distance', distance)
}
这是我的功能。
getDistance(latitude, longitude) {
navigator.geolocation.getCurrentPosition(
function (position) {
var distance = geolib.getDistance(position.coords, {
latitude: parseInt(latitude),
longitude: parseInt(longitude),
})
console.log('distance:', distance) //getting right value 54209m
return distance;
},
function () {
alert('Position could not be determined.')
},
{
enableHighAccuracy: true
}
);
}
答案 0 :(得分:0)
您需要将getCurrentPosition
包裹在一个Promise中,以便您可以解决距离问题,尝试返回类似正在执行的操作将不起作用。
这意味着getDistance
现在将返回一个承诺。该承诺在有距离时会resolve
,在出现错误时会reject
。
getDistance = async (latitude, longitude) => {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(position => {
var distance = geolib.getDistance(position.coords, {
latitude: parseInt(latitude),
longitude: parseInt(longitude),
})
console.log('distance:', distance); //getting right value 54209m
resolve(distance);
}, err => {
reject(err);
},
{
enableHighAccuracy: true
}
);
})
}
然后,您应该更新onCollectionUpdate
函数,以处理getDistance
函数将返回的承诺。请注意,您必须将其包装在try/catch
中,因为await
函数可能会抛出该错误。
onCollectionUpdate = async (querySnapshot) => {
try {
const distance = await this.getDistance(latitude, longitude);
console.log('distance', distance);
} catch (err) {
alert('Position could not be determined.') // <- put the alert here as this is where the error will be caught
}
}