如何停止具有相同名称的嵌套超时?

How to stop nested timeOut with same names?

我正在尝试使用具有相同名称的嵌套 timeOut,这实际上就像一个循环,而不是完全一样。 我尝试使用这个例子:

let i = 1;
setTimeout(function run() {
  func(i);
  setTimeout(run, 100);
}, 100);

来自这个 link。 正如您在 link 中看到的,我无法使用 intervalloop

这是我的实际代码:

let i = 0;
let x = setTimeout(async function run() {
  if(i == 2) {
    // I want to stop my x here completly
    console.log(i)
    clearTimeout(x);
  }
  try {
    //some code here e.g:
    console.log(10)
  } catch (err) {
    //some other code here e.g:
    console.log(err)
  }
  i++;
  x = setTimeout(run, 800);
}, 800);

我的输出:

10
10
2
10
10
... //never stops

我也看到了这个link,但不是我的情况

任何人都可以做点什么让我可以完全停止 x 吗?
提前致谢。

因为当您 clearTimeout 时,您不会被 return 阻止。所以你的超时将设置另一个超时 x = setTimeout(run, 800);。您需要做的就是 return 您的 clearTimeout(x) 停止超时功能。

    return clearTimeout(x);

在您的代码中,我看不出您需要清除超时的任何理由。超时运行 仅一次。所以如果你执行它。完成了。

您不需要超时引用,因为如果在函数内部引用无效,因为调用了超时。然后你需要停下来 return.

let i = 0;
setTimeout(async function run() {
  if (i == 2) {
    console.log(i)
    return
  }
  try {
    //some code here e.g: 
    console.log(10)
  } catch (err) {
    //some other code here e.g:
    console.log(err)
  }
  i++;
  setTimeout(run, 800);
}, 800);