去抖和 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。
这段代码有问题:
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。