11

I have a code like that:

var originalFunction = function() {
    return 'some value';
};

var debouncedFunction = _.debounce(originalFunction, 3000);

console.log('debouncedFunction() result: ', debouncedFunction());

console.log('originalFunction() result: ', originalFunction());

(codepen link)

And the result in the console is:

debouncedFunction() result:  undefined 

originalFunction() result:  some value

As you can see, the debounced function doesn't return anything. I understand that it's caused by an internal timer in the debounced function, but is there away around that?

Victor Marchuk
  • 10,195
  • 10
  • 36
  • 62

2 Answers2

12

that's because debounced functions are called asynchronously - you can't return a value from them, although you can call another function passing the result:

var originalFunction = function() {
    console.log('some value');
    // or something like: callback(result)
};

var debouncedFunction = _.debounce(originalFunction, 3000);

console.log('debouncedFunction() result: ', debouncedFunction());
pwolaq
  • 5,937
  • 16
  • 43
1

under the hood _.debounce uses setTimout, you need a callback to return value from a async function.

function originalFunction (callback) {
     callback("some value");
}

Here is a great link on the same, https://john-dugan.com/javascript-debounce/

Thalaivar
  • 20,946
  • 5
  • 57
  • 67