如何每秒调用一次 getCurrentPosition()?

用户11965730

我是异步函数的新手。我目前拥有的是watchPosition(),每当检测到新位置时就会触发。好吧,我需要的是每秒找到一个新的速度。所以,我想getCurrentPosition()每秒调用一次,记录用户的速度。当我使用setInterval()with时,我得到了一个很大的积压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 秒左右就会收到一连串的速度。所以我很困惑,我应该如何解决这个问题?使用可观察对象?


--edit: 使用 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)
    }
}
帕夫洛斯·卡拉利斯

您可以创建一个等待 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(); 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章