我可以在同一个ID上两次调用clearInterval吗?

时间:2018-07-13 04:32:23

标签: javascript

我正在使用这种繁琐的逻辑:

function handle_register_after_pressed(){
    if (typeof handle_register_after_pressed.sid !== "undefined" && ff_handle_register_after_pressed.sid)
    {
        clearInterval(handle_register_after_pressed.sid);
        ff_handle_register_after_pressed.sid = 0;
    }
    handle_register_after_pressed.sid = setInterval(function(){},1000);
}

我想取消旧的setInterval并在再次调用该函数时重新启动它。

是否可以使用这种方式:

function handle_register_after_pressed(){
     if (typeof handle_register_after_pressed.sid !== "undefined" )
     {
         clearInterval(handle_register_after_pressed.sid);
     }
     handle_register_after_pressed.sid = setInterval(function(){},1000);
 }

所以我想问:

  • 如果setTimeout返回的ID是唯一的,并且clearInterval不断增加?
  • 再次致电setTimeoutclearInterval再次使用相同的ID没问题
  • 当id为0或为null或undefined时,我们也可以调用setTimeoutclearInterval而不会产生异常。

1 个答案:

答案 0 :(得分:1)

setInterval的返回值只是用于传递回clearInterval的唯一数字。它不是具有任何其他信息的对象。

因此此代码CREATE TABLE cities ( [city] varchar(10) , [type] varchar(10) , [month] int , [value] int ); INSERT INTO cities ([city], [type], [month], [value]) VALUES ('one','Active',0,222), ('one','Push',0,-7), ('one','Push',1,1), ('one','Push',2,-6), ('one','Push',3,0), ('two','Active',0,363), ('two','Push',0,-5), ('two','Push',1,4), ('two','Push',2,-5), ('two','Push',3,5), ('three','Active',0,394), ('three','Push',0,10), ('three','Push',1,5), ('three','Push',2,-8), ('three','Push',3,0) ; 将不起作用,因为在执行clearInterval之后,handle_register_after_pressed.sid不会设置为undefined或为null。

如果您想知道是否清除间隔,则需要提出如下的自定义解决方案,

Loader.js

然后这样称呼它,

static propTypes = {
  nameLoader: PropTypes.string,
  typeSpinner: PropTypes.string
}

static defaultProps={
  typeSpinner:'ThreeBounce'
}

要回答其余的问题,

  1. 是,从setTimeout和setInterval返回的ID在当前网页的生存期内是唯一的。此外,setInterval()和setTimeout()使用的ID池是共享的,这意味着它是一个不断增加的计数器。

  2. 如果在相同的id上调用clearInterval,没问题。生成间隔ID后,即使清除了该间隔(直到当前网页的生命周期),也不会将其返回到ID池中。

  3. 如果使用无效参数(例如null或undefined或0)调用clearInterval,则不会产生问题。它不会引发任何异常。你很安全。