在 javascript returns 中分配地图坐标未定义

Assigning map co ordinates in javascript returns undefined

(async ( ) =>  {
    async function foo() {
        navigator.geolocation.getCurrentPosition(success, error, options)
        {
            var options = {
            enableHighAccuracy: true,
            timeout: 5000,
            maximumAge: 0
            };
            
            function success(pos) {
            var crd = pos.coords;
            console.log('Your current position is:');
            console.log(`Latitude : ${crd.latitude}`);
            lat = crd.latitude;
            console.log(`Longitude: ${crd.longitude}`);
            long = crd.longitude;
            console.log(`More or less ${crd.accuracy} meters.`);
            return [lat, long];
            }
            
            function error(err) {
            console.warn(`ERROR(${err.code}): ${err.message}`);
            }
        };
    };
})
    

let result = await foo();
console.log(result);

 x = await result[1]
    console.log(x);

我试图从浏览器中获取地图坐标并将它们分配给变量,以便与其他坐标进行比较并找到与某个地方的接近程度。 但它一直返回 un

从你的问题中不清楚这些“其他”坐标来自哪里,它们是硬编码的,还是从 cookie 或 localStorage 加载的,但是这个例子获取坐标并保存它们到一个数组,然后保存到 localStorage,每当页面刷新时加载。

它对 return 地理定位搜索结果使用一种承诺,对主要功能使用一种异步方法。

注意:由于安全问题,这不会 运行 在一个片段中,但它已经过全面测试。

const posArr = JSON.parse(localStorage.getItem('pos')) || [];

function getPos(options)  {
  return new Promise((res, rej) => {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(
        (pos) => res(pos),
        (err) => rej(logError(err)),
        options
      );
    }
  });
}

function logPos(data) {
  const { accuracy, latitude, longitude } = data.coords;
  console.log('Your current position is:');
  console.log(`Latitude : ${latitude}`);
  console.log(`Longitude: ${longitude}`);
  console.log(`More or less ${accuracy} meters.`);
  posArr.push({ accuracy, latitude, longitude });
  localStorage.setItem('pos', JSON.stringify(posArr));
}

function logError(err) {
  const { code, message } = err;
  console.error(`Error code ${code}: ${message}`);
}

const options = {
  enableHighAccuracy: true,
  timeout: 5000,
  maximumAge: 0
};

async function main(options) {
  try {
    const response = await getPos(options);
    if (response) {
      logPos(response);
      console.log(posArr);
    }
  } catch (err) {
    console.log('Position not available.');
  }
}

main();