2016-06-15 7 views
1

У меня есть код так:Как вернуть значение из функции debounced в javascript?

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

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

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

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

(codepen link)

И результат в консоли:

debouncedFunction() result: undefined 

originalFunction() result: some value 

Как вы можете видеть, функция противодребезговую защиту ничего не вернуть. Я понимаю, что это вызвано внутренним таймером в дебютирующей функции, но есть ли это вокруг?

ответ

3

это потому, что противодребезговая защита функция называется асинхронно - вы не можете вернуть значение из них, хотя вы можете вызвать другую функцию передавая результат:

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

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

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

под капотом _.debounce использует setTimout, вам нужен обратный вызов для возврата значения из функции async.

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

Вот отличная ссылка на то же самое, https://john-dugan.com/javascript-debounce/