Quello che ho fatto è usato _.mixin per creare un metodo _.cancellableDebounce. È quasi identico all'originale ad eccezione di due nuove linee.
_.mixin({
cancellableDebounce: function(func, wait, immediate) {
var timeout, args, context, timestamp, result;
var later = function() {
var last = _.now() - timestamp;
if (last < wait && last >= 0) {
timeout = setTimeout(later, wait - last);
} else {
timeout = null;
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
};
return function() {
context = this;
args = arguments;
timestamp = _.now();
var callNow = immediate && !timeout;
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
result = func.apply(context, args);
context = args = null;
}
// Return timeout so debounced function can be cancelled
result = result || {};
result.timeout = timeout;
return result;
};
}
});
USO:
var thing = function() {
console.log("hello world");
}
var debouncedThing = _.cancellableDebounce(thing, 1000);
var timeout = debouncedThing().timeout;
clearTimeout(timeout);
fonte
2015-03-12 19:52:38
Perché il downvote? – user1031947
possibile duplicato di [Utilizzo della funzione di rimbalzo nel trattino basso] (http://stackoverflow.com/questions/7026000/using-debounce-function-in-underscore) –
Questa domanda non è chiara. Il mio è specifico. Quella domanda non fornisce una risposta alla mia domanda. – user1031947