使用 Lodash 的 debounce() 函数限制方法

发布于 2022-08-17 23:44:47 字数 1653 浏览 185 评论 0

Lodash's debounce()function  允许您延迟调用函数,直到经过一定的毫秒数。 一种常见的用例 debounce() 是用于自动完成的 HTTP API 调用:假设当用户输入输入时,您只想执行一次 HTTP 请求。 下面是一个示例,说明如何 debounce() 工作。

const wait = 100;
el.addEventListener('change', _.debounce(autocomplete, wait));

el.value = 'te';
el.trigger('change'); // "Called: te" after 100ms
await new Promise(resolve => setTimeout(resolve, 110));

el.value = 'test';
// Nothing, because the next 'change' event takes over
el.trigger('change');
await new Promise(resolve => setTimeout(resolve, 50));

el.value = 'testing';
el.trigger('change'); // "Called: testing" after 100ms

function autocomplete() {
  console.log('Called:', el.value);
}

在实践中, autocomplete() 函数会发出一个 HTTP 请求。autocomplete() 函数 直到用户停止输入 100 毫秒后才会调用。

这篇博文有一个方便的比喻 debounce()debounce()像电梯一样工作。 电梯直到门关闭并且门保持打开至少 100ms 才离开。 如果另一个函数调用进来,那就像有人把门开着,然后门又等了 100 毫秒才关上。

还有一个 maxWait 函数在执行前将等待的选项。 如果 maxWait = 120,以下示例中的第二个 更改 事件将在 60 毫秒而不是 100 毫秒后执行。

const wait = 100;
el.addEventListener('change', _.debounce(autocomplete, wait, {
  maxWait: 120
}));

el.value = 'te';
el.trigger('change');
await new Promise(resolve => setTimeout(resolve, 60));

el.value = 'test';
el.trigger('change'); // "Called: test" after 60ms

function autocomplete() {
  console.log('Called:', el.value);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

べ繥欢鉨o。

暂无简介

文章
评论
25 人气
更多

推荐作者

微信用户

文章 0 评论 0

小情绪

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

笨死的猪

文章 0 评论 0

彭明超

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文