我正在使用这种繁琐的逻辑:
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
不断增加?setTimeout
,clearInterval
再次使用相同的ID没问题undefined
时,我们也可以调用setTimeout
,clearInterval
而不会产生异常。答案 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'
}
要回答其余的问题,
是,从setTimeout和setInterval返回的ID在当前网页的生存期内是唯一的。此外,setInterval()和setTimeout()使用的ID池是共享的,这意味着它是一个不断增加的计数器。
如果在相同的id上调用clearInterval,没问题。生成间隔ID后,即使清除了该间隔(直到当前网页的生命周期),也不会将其返回到ID池中。
如果使用无效参数(例如null或undefined或0)调用clearInterval,则不会产生问题。它不会引发任何异常。你很安全。