如何在调用其中的函数后停止 setInterval
How to stop setInterval after calling a function in it
所以,我有条件检查我是否在当前 URL。如果为真,setInterval()
将开始检查页面上的元素之一。
如果找到元素 - 函数被调用。如果没有,它会在一段时间后清除间隔:
if(document.location.href.includes('part-of-url')){
var i = 0;
var interval = setInterval(()=>{
if(document.querySelector('.selector')){
someFunction();
}
else{
i++;
}
if(i >= 20){
clearInterval(interval);
}
}, 100)
}
如果找不到元素,我会清除间隔,但根据我对setInterval()
的理解,我调用函数后不会清除它,并将保持运行ning。调用函数后清除它的最佳位置在哪里?
这段代码的全部目的是 运行 加载元素后的函数。我试图在函数调用后清除它,但是 someFunction()
代码从未被调用过。
如果你想在找到元素后清除区间,只需调用clearInterval(interval)
before/after someFunction()
.
话虽如此,最好递归地使用 setTimeout
,因为它不会像 setInterval
.
那样容易淹没您的事件循环
作为奖励,您可以使用递归结构将迭代计数器 包含在 递归函数的范围内:
function checkIfElementExists(i) {
if (document.querySelector('.selector')) {
someFunction();
} else if (i > 0) {
setTimeout(() => checkIfElementExists(i - 1), 100);
}
}
if (document.location.href.includes('part-of-url')) {
checkIfElementExists(20);
}
所以,我有条件检查我是否在当前 URL。如果为真,setInterval()
将开始检查页面上的元素之一。
如果找到元素 - 函数被调用。如果没有,它会在一段时间后清除间隔:
if(document.location.href.includes('part-of-url')){
var i = 0;
var interval = setInterval(()=>{
if(document.querySelector('.selector')){
someFunction();
}
else{
i++;
}
if(i >= 20){
clearInterval(interval);
}
}, 100)
}
如果找不到元素,我会清除间隔,但根据我对setInterval()
的理解,我调用函数后不会清除它,并将保持运行ning。调用函数后清除它的最佳位置在哪里?
这段代码的全部目的是 运行 加载元素后的函数。我试图在函数调用后清除它,但是 someFunction()
代码从未被调用过。
如果你想在找到元素后清除区间,只需调用clearInterval(interval)
before/after someFunction()
.
话虽如此,最好递归地使用 setTimeout
,因为它不会像 setInterval
.
那样容易淹没您的事件循环
作为奖励,您可以使用递归结构将迭代计数器 包含在 递归函数的范围内:
function checkIfElementExists(i) {
if (document.querySelector('.selector')) {
someFunction();
} else if (i > 0) {
setTimeout(() => checkIfElementExists(i - 1), 100);
}
}
if (document.location.href.includes('part-of-url')) {
checkIfElementExists(20);
}