去抖和 return

Debounce and return

这段代码有问题:

function aFunction(){
  ....
    var deferred = $q.defer();
    debounce(function () {
       deferred.resolve(service.subscribe0(data));
    }, 350);
  return deferred.promise;
}

returned 承诺从未得到解决。 Debounce 功能是一个 3rd 方功能,从 NPM 有很多下载,所以我可以确定它有效。

难道是因为return声明了"removes"函数的作用域?我怎样才能避免这种情况并解决承诺?

你误解了 debounce() 的作用。

debounce()是接受一个函数的函数,returns是一个函数。返回的函数只会在静默 N 毫秒后调用传递的回调(即如果你非常快速地顺序调用 debounced 函数,只有最后一次调用才会生效,时间结束后)。

debounce() 本身不会调用您传递给它的函数。所以,deferred.resolve() 永远不会被调用。

我希望是这样的:

const getData = data => Promise.resolve( service.subscribe0( data ));
grid.addEventListener( 'scroll', debounce( getData, 350 ));

我们希望网格在滚动时自行更新,但对其进行去抖动处理,这样它就不会因调用而淹没服务。所以我们必须去抖绑定到滚动而不是数据调用的函数,因为在两个不同的数据调用之间没有 link。