在_.debounce()中检查param值的优雅方法是什么?
var renderPage = _.debounce(function(pageNo){
// render code for page=pageNo immediately, then
// debounce repeated calls for the SAME pageNo
// but a DIFFERENT pageNo would have a different debounce setTimeout()
}, 1000, true)
renderPage(1); // render immediate
renderPage(1); // debounced
renderPage(2); // render immediate
renderPage(2); // debounced发布于 2013-12-20 22:17:00
答案不错,但另一种可能是回忆录。类似于:
var renderPage = function (pageNo) {
renderPage._pageNos = renderPage._pageNos || {};
if (!(pageNo in renderPage._pageNos)) {
renderPage._pageNos[pageNo] = _.debounce(function () {
// Do renderPage() work here
}, 1000, true);
}
renderPage._pageNos[pageNo]();
}JSFiddle演示。
发布于 2013-12-20 19:42:01
这是一个可能的解决办法吗?我回到了下划线的来源。我认为您需要跟踪不同的setTimeout调用才能完成任务。有没有更一般的方法来保持定时器arg‘静态’的某处?
_.debounceByArgs = function(func, wait, immediate, timers) {
var timeout = timers || {};
return function() {
var context = this, args = arguments;
var id = JSON.stringify(args);
var later = function() {
timeout[id] = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout[id]);
timeout[id] = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};发布于 2013-12-20 17:28:18
也许是这样的?
var debouncer = function(func, timer){
return _.debounce(func, timer, true);
}
var renderPage = function(num){
}
var renderPage1 = debouncer(renderPage, 1000);
var renderPage2 = debouncer(renderPage, 2000);好的,下面这样的内容如何?
var rp = function(num){
//actual render page code here
}
var renderPage = function(num, timer){
if(typeof(this[num]) === "undefined"){
this[num] = _.debounce(rp, timer, true);
}
this[num](num);
}https://stackoverflow.com/questions/20708777
复制相似问题