问题标签 [debounce]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
28785 浏览

javascript - Lodash debounce 在 React 中不起作用

最好先看看我的代码:

只是一个简单的输入。在构造函数中,它value从 props(如果可用)中获取组件的本地状态。

然后在我更新状态的onChange函数中input,然后尝试调用 web 服务端点来设置新值Services.setValue()

如果我像这样debounce直接通过输入设置onChange

但随后this.setState仅每 1000 毫秒调用一次并更新视图。因此,在文本字段中输入最终看起来很奇怪,因为您输入的内容只在一秒钟后显示。

在这种情况下我该怎么办?

0 投票
3 回答
270 浏览

javascript - 如果术语为空,则禁用实时搜索 - Angular 2

我使用本教程创建了一个实时搜索,但如果我在查询中发送空白搜索,我的终点会重定向。如果我的键盘为空白,如何禁用我的功能?

在我的 html 中键入:

零件:

搜索服务:

0 投票
1 回答
3079 浏览

angular - Angular & Observable debounceTime

在 Angular 4 项目中,我有一个函数(我们称之为它reload()),它可以随时被其他函数(我们称之为A()and B())调用。我想消除从orreload()的最后一次调用传递的直到 X 时间(即毫秒)的执行。我正在查看and函数,但我不明白它们是否真的可以帮助我。A()B()Rx.Observable.debounceRx.Observable.debounceTime

一个例子:

0 投票
2 回答
1571 浏览

react-redux - 取消之前的请求实时搜索reactjs

我需要使用实时搜索 axios 请求取消上一个请求 - 我正在使用油门去抖动来发出请求,但是在删除现有单词并更新新值时我遇到了问题 - 在某些情况下会显示前一个单词的结果,我想我需要取消所有以前对相同 requestID 的请求,通读文章,但它们都不适用于我的用例。任何帮助都是我的代码。

减速器:

服务:

0 投票
1 回答
691 浏览

javascript - 在观察者(AngularJS)中反跳函数执行

我有一个vm.search变量,它是输入元素的 ng 模型。当我输入一些东西时,我想用一个delayedSave函数将它保存到数据库中,但我不想保存用户输入的所有内容。所以我决定使用 lodash_.debounce函数,但问题是这个函数在$scope.$watch. delayedSave执行次数与$scope.$watch函数一样多。

我可以将 debounce 设置为$watch的回调,但我需要执行我在下面编写的代码,每次vm.seach都发生了变化。

0 投票
1 回答
460 浏览

r - 输入更改时去抖定时器不重新启动

我正在尝试创建一个日期输入,该输入会自动将输入的值更新为所选月份的月底。我遇到的问题是,当我运行第一段代码(如下)时,如果用户尝试通过输入日期来手动更改日期,他们将无法更改,因为输入会立即更新到月底在用户完成输入之前。

因此,我尝试实现去抖动(如下所示 - 仅更改服务器代码),以便延迟输入更新,直到用户完成输入;但是,我遇到了一个问题。正如我所理解的那样,计时器不会在每次击键时重置。相反,计时器就像我使用油门功能一样运行,并在输入第一次更改时启动,并且在输入更改时不会重置。

0 投票
2 回答
486 浏览

javascript - 如何显式覆盖 AngularJS 模型去抖动?

在我们的 AngularJS 1.* 应用程序的一个页面上,我正在查看一个文本输入1,它的debounce值设置为大于零。大致是这样配置的:

通过该文本输入输入的数据在单击按钮或按下键时进行处理Enter

现在,问题是当用户Enter在更改值后立即点击时,由于去抖动设置,新值尚未在模型中。

我能找到的解决方案的唯一提示是关于使用ngSubmit而不是ngClick,但我们既没有使用表单元素,也没有使用ngClick(后者至少在重要的地方不重要)。通过事件Enter在自定义指令中捕获按键。keydown

我可以以某种方式强制 AngularJS 跳过去抖动期并立即在该keydown事件的处理程序中根据我的命令更新模型吗?

请注意,一个明显的解决方法是$timeout在处理程序中使用略高于去抖动延迟,keydown以确保模型已更新。不过,这对我来说真的很奇怪,而且也与用户希望在Enter按键时立即做出反应的期望相冲突。


1:实际上,它是一个动态生成的 UI,可以在嵌套容器中包含任意数量的此类文本输入。

0 投票
1 回答
77 浏览

timer - 为什么 LED 不熄灭?

我有一个程序(复制如下),它有一个在 10 秒内启动的警报,它启动一个每两秒闪烁一次的 LED。我想按下一个关闭警报/LED 的按钮。LED 按预期闪烁,但在我按下按钮时不会关闭。知道为什么吗?下面的代码:

0 投票
1 回答
156 浏览

vuejs2 - 使用 vue-multiselect 和 debounce 时无法从 vue.js 组件内部调用另一种方法

我正在尝试使用 vue-multiselect 实现自动完成,它具有异步服务器调用,但我使用 debounce 函数来延迟服务器中的调用,但我遇到了问题。问题是我无法从我使用 debounce 的方法中调用另一个方法。我的代码如下:

它没有记录 q ,而是将错误显示为:

我从以下代码行调用了 asyncFind

0 投票
1 回答
548 浏览

angular - 使用对服务的去抖动更新值调用测试表单字段

我在组件中有一个表单字段(用户名),当更新时调用服务来检查数据库中值的可用性。一切正常,但我似乎无法触发该字段的更新功能。

以下是组件代码的摘录:

这是组件模板中的字段:

这是我的测试:

最后expect(service.chkUser).toHaveBeenCalled()是导致我的测试失败的原因。我已经在应用程序中运行了这个组件,它按预期工作我只是想让测试通过。我已经尝试了很多设置输入值和调度事件的组合,等待夹具检测更改或使用 whenStable(),抛出一个承诺,使用 fakeAsync 而不是使用 fakeAsync。似乎没有任何效果。