首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于param值进行_.debounce()?

如何基于param值进行_.debounce()?
EN

Stack Overflow用户
提问于 2013-12-20 17:18:20
回答 3查看 494关注 0票数 0

在_.debounce()中检查param值的优雅方法是什么?

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-20 22:17:00

答案不错,但另一种可能是回忆录。类似于:

代码语言:javascript
复制
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演示

票数 1
EN

Stack Overflow用户

发布于 2013-12-20 19:42:01

这是一个可能的解决办法吗?我回到了下划线的来源。我认为您需要跟踪不同的setTimeout调用才能完成任务。有没有更一般的方法来保持定时器arg‘静态’的某处?

代码语言:javascript
复制
    _.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);
        };
    };
票数 1
EN

Stack Overflow用户

发布于 2013-12-20 17:28:18

也许是这样的?

代码语言:javascript
复制
var debouncer = function(func, timer){
    return _.debounce(func, timer, true);
}

var renderPage = function(num){


}

var renderPage1 = debouncer(renderPage, 1000);
var renderPage2 = debouncer(renderPage, 2000);

好的,下面这样的内容如何?

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20708777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档