gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:39:58 28 4
gpt4 key购买 nike

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

例如:(我希望我的 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);
}

...但这是完全没有必要的,正如规范 here 所保证的那样和 here 。 (如果您使用 Node.js,则该规范不适用,但执行上述操作仍然完全没问题。请注意,Node.js 的计时器句柄是对象而不是数字,但 0 仍然适用于 [例如,没有错误]第一次通话。)

关于javascript - 在javascript中运行多个连续事件中的最后一个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126085/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com