我正在调用该函数以使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
}
);
}
您需要将getCurrentPosition
包裹在承诺中,以便您可以解决距离,试图返回像您正在做的事情一样行不通。
这意味着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
}
}