簡體   English   中英

Lodash Debounce沒有貶值

[英]Lodash Debounce not debouncing

我正試圖使用Lodash去抖動函數 ,雖然它正在調用函數,但它似乎根本沒有去抖動它。 我的問題似乎與我在其他地方SO或Google 看到的錯誤一樣(通常,他們沒有調用_.debounce返回的功能)。

我目前的超級簡單實現如下(在Angular with 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 創建一個函數,用於_.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> 

試試這個:

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

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

POC: http//jsfiddle.net/bvaughn/3saj6znk/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM