Debounce function with args underscore

2019-03-17 11:55发布

I've got a function which takes in some arguments. But usage of underscore debounce is :

var lazyLayout = _.debounce(calculateLayout, 300);

But in my case calculateLayout needs some arguments to run. How can I pass them in this case?

Update :

Sample calculateLayout function :

var calculateLayout = function(a,b) {
  console.log('a is ' + a + ' and b is ' + b);
}

4条回答
The star\"
2楼-- · 2019-03-17 12:28

As soon as nobody written the one liner without extra var and function, I'll do it myself:

_.debounce(calculateLayout, 300)(a, b);

Debounce function returns another function, so you can call it just afterwards debounce is executed.

查看更多
The star\"
3楼-- · 2019-03-17 12:32

@Jamie's answer is better.

I'll keep my original answer as below, although the it should be better to use Jamie's answer if you are familiar with JS:

var calculateLayout = function(a,b) {
  console.log('a is ' + a + ' and b is ' + b);
}

var debounceCalculate = _.debounce(function(a, b){
    calculateLayout(a, b);
}, 300);

debounceCalculate(1, 2);
查看更多
唯我独甜
4楼-- · 2019-03-17 12:35

You don't need an anonymous function in the middle, arguments will automatically be passed to the original function when you run the debounced version.

  var debounceCalculate = _.debounce(calculateLayout, 300);
  debounceCalculate(a,b);

As an advantage you don't have to hardcode-bind the arguments in advance

You can try it and if curious just check the source

查看更多
Melony?
5楼-- · 2019-03-17 12:45

You should be able to just use an anonymous function as the first argument, then call whatever you like in it:

_.debounce(function(){
    calculateLayout(20, 30);
}, 300);
查看更多
登录 后发表回答