source

Lodash Debounce는 비난하지 않는다.

nicesource 2023. 2. 14. 21:30
반응형

Lodash Debounce는 비난하지 않는다.

Lodash를 사용하여 함수를 디버깅하려고 하는데 함수를 호출해도 전혀 디버깅이 되지 않는 것 같습니다.제 문제는 SO나 Google에서 본 것과 같은 실수가 아닌 것 같습니다(일반적으로 그들은 다음 함수를 호출하지 않습니다)._.debounce반품).

제가 현재 사용하고 있는 슈퍼 심플한 실장은 다음과 같습니다(CoffeeScript를 사용한 Angular).

  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()입력란에 입력함으로써 빠르게 횡설수설하면 콘솔은 키를 누를 때마다 검색 요청을 1초에 몇 번씩 출력합니다. 이는 전혀 삭제되지 않았음을 나타냅니다.

내가 뭘 잘못하고 있는지 알기나 해?

_.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/

언급URL : https://stackoverflow.com/questions/29131561/lodash-debounce-not-debouncing

반응형