有没有内置的方法可以判断一个setTimeout的回调是否已经执行过?
使用 setTimeout 时,我们会得到一个可用于取消定时器的定时器ID:
const id = setTimeout(() => {
console.log("Executed");
}, 1000);
clearTimeout(id);
然而,似乎没有内置的方法来检查定时器是否已经执行过。我想知道它是已经执行还是仍在等待执行。并不是要找出活动定时器列表存放在哪里。
比如:
if (/* timer has not executed yet */) {
clearTimeout(id);
}
解决方案
没有内置的方法来检查一个 setTimeout 回调是否已经执行过。
由 setTimeout 返回的值只是一个定时器标识符,只能与 clearTimeout 一起使用。它并不暴露关于定时器本身的任何状态。这只会增加复杂性和潜在的竞争条件。你需要自己进行跟踪:
一种做法是将代码结构化,使回调本身来决定是否执行:
let cancelled = false;
const id = setTimeout(() => {
if (cancelled) return;
console.log("Executed");
}, 1000);
// cancel
cancelled = true;
clearTimeout(id);
或者如果你想显式地跟踪执行情况:
let executed = false;
const id = setTimeout(() => {
executed = true;
console.log("Executed");
}, 1000);
// later
if (!executed) {
clearTimeout(id);
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。