gpt4 book ai didi

javascript - 延迟函数运行 n 秒,然后运行一次。 (2分钟问题)

转载 作者:行者123 更新时间:2023-11-28 12:49:37 25 4
gpt4 key购买 nike

TLDR 我有一个在 openlayers map 中的平底锅末端运行的函数。不希望它连续发射。

<小时/>

我有一个在平移 map 结束时运行的函数。我希望它在平底锅完成后 3 秒后才会触发该功能。虽然我不想像 setTimeout 当前所做的那样将函数排队等待 10 次左右。

如何将函数延迟运行 n 秒,然后无论调用多少次都只运行一次?

    map.events.register("moveend", map, function() {
setTimeout(SetLocation, 5000);
});

移动:

moveend - triggered after a drag, pan, or zoom completes

上面的代码甚至使用了 setTimeout(func, delay);运行时仍然会多次触发。我怎样才能防止这种情况发生?

<小时/>

最佳答案

好吧,满足您的要求,您可以构建一个简单的函数包装器:

var executeOnce = (function (fn, delay) {
var executed = false;
return function (/* args */) {
var args = arguments;
if (!executed) {
setTimeout(function () {
fn.apply(null, args); // preserve arguments
}, delay);
executed = true;
}
};
});

使用示例:

使用您的代码:

map.events.register("moveend", map, executeOnce(SetLocation, 5000));

其他用途:

var wrappedFn = executeOnce(function (a, b) {
alert(a + ' ' + b);
}, 3000);

wrappedFn('hello', 'world');
wrappedFn('foo', 'bar'); // this won't be executed...

包装的函数将延迟指定的时间并仅执行一次。

关于javascript - 延迟函数运行 n 秒,然后运行一次。 (2分钟问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2894564/

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