我一直在寻找一种有效的方法来检查超时是否仍然存在,以便之前将其清除。但是意识到至少在最近的number
和Chrome
一直都是Safari
。如果有人能对此案发表一些看法,我将不胜感激:
const timeout = setTimeout(() => {
// do magic
}, 100000)
console.log(typeof timeout) // number (makes sense)
clearTimeout(timeout)
console.log(typeof timeout) // number (...hmm)
setTimeout(() => {
console.log(typeof timeout) // number --> magic ¯\_(ツ)_/¯
}, 1000)
答案 0 :(得分:0)
在清除{({1}})时将timeout
设置为undefined
的情况(以及超时情况(取决于用例))如何设置:
clearTimeout(timeout);
timeout = undefined;
这样,您便可以轻松地检查超时是否完成
if(timeout) /* do stuff */
(然后您必须将const timeout
更改为let timeout
)
答案 1 :(得分:0)
clearTimeout
确实从计时器队列中删除了回调。它不会更改用于存储标识符值的timeout
变量-尤其是因为您将其声明为const
。
我正在寻找一种检查超时是否仍然有效的有效方法
使用let timeout
并在清除它时将其设置为null
或undefined
。
为了在之前清除它
或只是始终调用clearTimeout
,如果计时器之前已清除或运行过计时器,则不会造成任何危害。
答案 2 :(得分:0)
setTimeout
(还有setInterval
和requestAnimationFrame
)返回带有进程ID的数字,因此您以后可以取消它。因此,当您致电clearTimeout(id)
时,过程将被取消。但是会复制原始值,即有数字的amont,因此一旦将数字分配给变量,它就会保留在那里。
调用cleatTimeout(id)
处理已取消的过程不会导致任何错误。