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



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

例如:(我希望我的mainfunc((函数仅运行一次和最后一个通话(

//leaflet map
map.on('moveend zoomend', function () {
    updateBoundaries();
});

let processing = false;
function updateBoundaries(){
    processing = true ;
    setTimeout(function () {
        if(processing == true){
           mainFunc();
           processing = false;
         }
    },3000);
}

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

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仍然可以使用[例如,没有错误]第一个通话。(

相关内容

最新更新