【问题标题】:How would one call getCurrentPosition() every second?如何每秒调用一次 getCurrentPosition() ?
【发布时间】:2020-07-24 02:49:59
【问题描述】:

我是异步函数的新手。我目前拥有的是watchPosition(),它会在检测到新位置时触发。好吧,我需要的是每秒找到一个新的速度。所以,我想每秒调用getCurrentPosition(),记录用户的速度。当我将setInterval()getCurrentPosition() 一起使用时,我得到了大量的积压。

我想要什么(时间、速度):

1s, 1m/s
2s, 1.5m/s
3s, 1.2m/s...etc

我通过 setInterval 和 getCurrentPosition() 得到什么:

5s, 1m/s
5s, 1m/s
5s, 1m/s
10s, 1.5m/s
10s, 1.5m/s
10s, 1.5m/s...etc

使用setInterval(),速度都是一样的,我每 5 秒左右就会收到一连串的速度。所以我很困惑,我应该如何解决这个问题?使用 observable?


--编辑: 使用 watchPosition():

function getAverageWalkingSpeed():any {
    var options = {
        maximumAge: 1000,
        timeout: 5000,
        enableHighAccuracy : true,
    };
    let watch = navigator.geolocation.watchPosition(onSuccess, onError, options);
    
    function onSuccess(position: { timestamp: string | number | Date; coords: { speed: any; latitude: any; longitude: any; }; }) {
        let time = formatTime(new Date(new Date().getTime())); //time when speed was found
        let speed = position.coords.speed;
        console.log(time,speed)
    })
}

使用 setInterval 函数,将之前的 watchPosition() 替换为 getCurrentPosition()。应该只需要调用 setTimer(true):

function setTimer(state: boolean){
    if(state){
        var timer = setInterval(getAverageWalkingSpeed, 1000);
    }
    else{
        clearInterval(timer)
    }
}

【问题讨论】:

标签: javascript


【解决方案1】:

您可以创建一个等待getCurrentPosition的包装函数,然后在1秒后递归调用自身:

function mockGetCurrentPosition () {
  return new Promise((resolve,reject)=> {
    setTimeout(()=> resolve(console.log("x,y")),1000); 
  });
}


async function getPosition () {
  await mockGetCurrentPosition(); 
  setTimeout(()=> getPosition(), 1000); 
}

getPosition(); 

【讨论】:

  • 欣赏它,这看起来像我要找的。我会试一试并报告!
  • 由于某种原因,当我使用这个和地理定位 api 时,它仍然没有每秒给出一个速度。如果您对该 api 有任何专门的提示,请告诉我,否则我将使用您的异步代码作为基础。谢谢!
  • 不会是每一秒,而是完成一次通话所需的时间+1秒;您可以减少 setTimeout 持续时间,但如果异步调用本身超过 1 秒,则无法做到。
  • 知道了。 WatchPosition() 在户外时每秒返回一个值(我正在创建一个室内应用程序,但我正在测试以确保我可以每秒获得一个值,其承诺类似于我单独使用 WatchPosition() 的方式,然后应用它在室内时)。但是当我使用promise方法时,我只能每2-3s左右得到一个值。只是奇怪,我想我需要弄乱它
猜你喜欢
  • 2023-03-16
  • 2019-02-01
  • 2012-03-14
  • 1970-01-01
  • 2020-02-20
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多