【发布时间】: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)
}
}
【问题讨论】:
-
添加了我正在使用的代码。它在一定程度上是 Rylee,但我使用积压的代码是因为 getCurrentPosition 是异步的。所以我每 5 秒获得一连串的速度,而不是像我希望的那样每秒获得一个速度值。
标签: javascript