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

发布于 2022-08-17 23:44:47 字数 1653 浏览 183 评论 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。

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

醉城メ夜风

文章 0 评论 0

远昼

文章 0 评论 0

平生欢

文章 0 评论 0

微凉

文章 0 评论 0

Honwey

文章 0 评论 0

qq_ikhFfg

文章 0 评论 0

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