将 _.memoize() 与 _.debounce() 一起使用

mic*_*ael 3 javascript underscore.js

我想为每个调用特定页面的渲染函数去抖 - 渲染不同的页面将单独去抖。memoize 函数应该可以解决问题,但它无法正常工作。

var renderPage_underscore = function(pageNo){
  var debouncer = _.memoize(
    // memoize function
    _.debounce(
      // debounced function
      function () {
        // Do renderPage() work here
        document.getElementById("underscore").innerHTML += 
            '<br />' + pageNo + '@' +   new Date().getTime();
      },
      1000, // delay
      true
    ),
    // memoize hash function
    function (pageNo) {
        return pageNo;
    }
  );
  return debouncer(pageNo);
}; 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?http://jsfiddle.net/Zq8Wd/1/

psq*_*red 5

使用这种方式的问题_.memoize()是它缓存返回值,而不是副作用。如果你想用它_.memoize()来解决这个问题,你可能必须这样做:

rp = _.memoize(function (pageNo) {
    return _.debounce(function () {
        document.getElementById("underscore").innerHTML +=
            '<br />' + pageNo + '@' + new Date().getTime();
    }, 1000, true);
});

rp(1)();
rp(2)();
Run Code Online (Sandbox Code Playgroud)

更新了JSFiddle