我是异步函数的新手。我目前拥有的是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] 删除。
我来说两句