在javascript中运行多个连续事件中的最后一个事件

在javascript中运行多个连续事件中的最后一个事件,javascript,Javascript,如何在多个连续事件中应用最后一个事件 例如:(我希望mainFunc()函数只运行一次,也是最后一次调用) 记住上一个计时器句柄,并在接到新电话时取消它。最终,事件将停止,因此计时器不会被取消,因此您的函数将运行 let handle = 0; function updateBoundaries(){ clearTimeout(handle); // *** handle = setTimeout(mainFunc, 3000); } 重设标有***的行:第一次用0调用clea

如何在多个连续事件中应用最后一个事件

例如:(我希望mainFunc()函数只运行一次,也是最后一次调用)


记住上一个计时器句柄,并在接到新电话时取消它。最终,事件将停止,因此计时器不会被取消,因此您的函数将运行

let handle = 0;
function updateBoundaries(){
    clearTimeout(handle); // ***
    handle = setTimeout(mainFunc, 3000);
}
重设标有
***
的行:第一次用
0
调用
clearTimeout
是绝对正确的,调用被忽略;用已经运行的超时句柄调用它是绝对正确的(当你得到一个事件流时,就会发生这种情况,然后它们停止三秒钟,计时器运行,然后你得到另一个事件)。因此,当计时器运行时,无需使该调用有条件,或清除
handle
。如果您愿意,您可以:

// The handle logic here is completely unnecessary
let handle = 0;
function updateBoundaries(){
    if (handle) {
        clearTimeout(handle);
    }
    handle = setTimeout(function() {
        handle = 0;
        mainFunc();
    }, 3000);
}
…但这是完全没有必要的,因为规范和。(如果您使用Node.js,则该规范不适用,但执行上述操作仍然可以。请注意,Node.js的计时器句柄是对象而不是数字,但0在第一次调用时仍然有效[例如,无错误]。)

// The handle logic here is completely unnecessary
let handle = 0;
function updateBoundaries(){
    if (handle) {
        clearTimeout(handle);
    }
    handle = setTimeout(function() {
        handle = 0;
        mainFunc();
    }, 3000);
}