geolib函数未返回值

时间:2019-03-03 07:47:41

标签: react-native

我正在调用该函数来获取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
        }

    );
}

1 个答案:

答案 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
  }       
}