## 遇到的问题
showTip函数执行了两次
## 期望
showTip只执行一次
## 代码
```js
function watch (originPosition, originTime, originState) {
var timer = setInterval(async function () {
var endPosition = await getCurrentPosition()
var endState = await getCurrentState()
var conditions = [
isTimeout(originTime, new Date()),
isBeyondDistance(originPosition, endPosition),
isStateChange(originState, endState)
]
if (conditions.some(item => item)) {
clearInterval(timer)
showTip(!originState)
}
}, 1000)
}
```
async异步函数,意味着该函数的执行不会阻塞后面代码的执行。
那么问题来了:定时器每1s执行一次,你不能确保两个 await 后的代码刚好在1000ms这段时间执行完毕并且执行到下方清理定时器的位置?
假如getCurrentPosition()和 getCurrentState()要执行999.99ms,这段时间内,下方if还没来得及判断就先被再一次执行定时器,这个时候清理掉定时器不能阻止已经执行的进程,因此它便会执行两次...
这个是我的理解,供你参考..