在clearTimeout之后,它仍然是一个数字

时间:2019-07-22 21:23:30

标签: javascript

我一直在寻找一种有效的方法来检查超时是否仍然存在,以便之前将其清除。但是意识到至少在最近的numberChrome一直都是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)

3 个答案:

答案 0 :(得分:0)

在清除{({1}})时将timeout设置为undefined的情况(以及超时情况(取决于用例))如何设置:

 clearTimeout(timeout);
 timeout = undefined;

这样,您便可以轻松地检查超时是否完成

  if(timeout) /* do stuff */

(然后您必须将const timeout更改为let timeout

答案 1 :(得分:0)

clearTimeout确实从计时器队列中删除了回调。它不会更改用于存储标识符值的timeout变量-尤其是因为您将其声明为const

  

我正在寻找一种检查超时是否仍然有效的有效方法

使用let timeout并在清除它时将其设置为nullundefined

  

为了在之前清除它

或只是始终调用clearTimeout,如果计时器之前已清除或运行过计时器,则不会造成任何危害。

答案 2 :(得分:0)

setTimeout(还有setIntervalrequestAnimationFrame)返回带有进程ID的数字,因此您以后可以取消它。因此,当您致电clearTimeout(id)时,过程将被取消。但是会复制原始值,即有数字的amont,因此一旦将数字分配给变量,它就会保留在那里。

调用cleatTimeout(id)处理已取消的过程不会导致任何错误。