如何在调用其中的函数后停止 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);
}