当前位置: 首页 > 面试题库 >

Lodash反跳不反跳

吴谦
2023-03-14
问题内容

我正在尝试使用Lodash来对一个函数进行去抖动,并且在调用该函数时,它似乎根本没有对其进行去抖动。我的问题似乎与我在SO上其他地方看到的错误不一样(通常是,他们没有调用_.debounce返回的函数)。

我当前的超简单实现如下(在Angular中使用CoffeeScript):

  s.search = -> _.debounce( s._makeSearchRequest, 1000 )()

  s._makeSearchRequest = -> console.log("making search request")

在JS中,我相信是这样的:

  s.search = function() { _.debounce( s._makeSearchRequest, 1000 )() }

  s._makeSearchRequest = function() { console.log("making search request") }

s.search()通过在输入框中键入内容来运行,如果我很快键入乱码,则控制台会在每次按键时每秒打印多次“发出搜索请求”,这表明它根本没有被消除抖动

任何想法我在做什么错?


问题答案:

_.debounce 创建
一个函数,以对传递给它的函数进行去抖动。您的s.search函数正在做的事情是_.debounce每次s.search都被再次调用。每次都会创建一个全新的功能,因此没有任何反跳现象。

因此,解决方案是删除箭头和多余的一对括号,并确保s._makeSearchRequest在访问之前定义了该箭头:

s._makeSearchRequest = -> console.log("making search request")

s.search = _.debounce( s._makeSearchRequest, 1000 )

示例(使用JavaScript):

var s;



s = {};



s._makeSearchRequest = function(q) {

  return console.log("making search request: " + q);

};



s.search = _.debounce(s._makeSearchRequest, 1000);



// call s.search three times in a row

s.search(1);

s.search(2);

s.search(3);



// call s.search after 500 ms

setTimeout(s.search, 500, 4);



// call s.search after 3 seconds

setTimeout(s.search, 3000, 5);



// timer to show passage of time

var i = 0;

var t = setInterval(function () {

    i += 1;

    console.log(i + " seconds elapsed");

    if (i > 5) { clearInterval(t); }

}, 1000);


<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/3.5.0/lodash.min.js"></script>


 类似资料:
  • 问题内容: 我有一个复选框,可以切换某些行为,但是如果有人连续点击100次,我不想向服务器端发送100个请求。 到目前为止,这就是我所准备的(找到以下代码片段): 在我的文档准备功能中: 然后事件本身: 这是因为我将1500毫秒作为去抖动周期,所以如果您在1500毫秒内单击n次,它将仅向服务器发送最新状态。 但是,使用它会有副作用,现在我的其他事件的click事件被搞砸了。我在这里做错什么了吗?有

  • 问题内容: 我应该如何反序列化以下JSON以跳过根元素并仅解析此JSON的内部。我想避免创建其他仅包含字段的3rd类。 因此,我只希望有以下两个类: 问题答案: 您可以为此使用库。 下面的代码将解决您的问题。

  • 问题内容: 我正在尝试使用A 查询Google地方。为此,在发给我的文字更改电话中,我正在向Google地方提出要求。问题是我宁愿将此呼叫退信以每250 ms仅请求一次,以避免不必要的网络流量。我不想自己编写此功能,但是如果需要的话,我会写的。 我发现:https : //gist.github.com/ShamylZakariya/54ee03228d955f458389,但我不太确定如何使用它

  • 问题内容: 下划线库提供了一个反跳功能,该功能可防止在设定的时间内多次调用该功能。他们的版本使用setTimeout。 我们如何用纯AngularJS代码做到这一点? 此外,我们可以利用$ q样式的承诺在反跳周期之后从调用的函数中检索返回值吗? 问题答案: 这是此类服务的工作示例:http : //plnkr.co/edit/fJwRER?p=preview。它创建了一个延迟对象,该对象将在最终调

  • 我的导航不工作,因为某些原因,我有另一个应用程序运行良好,但这一个不能找到错误,请帮助 反应路由器不工作。反应JS 我需要你的帮助。 使用react-router,我可以使用Link元素创建由react router本地处理的链接。

  • 问题内容: 我有以下反应成分 我该如何在rxjs上使用反跳功能? 问题答案: 您将需要从更改事件中爬出可观察到的位置(例如使用Subject),然后对此进行反跳。 这是为您提供功能齐全的示例: