我对这段代码有疑问:
function aFunction(){
....
var deferred = $q.defer();
debounce(function () {
deferred.resolve(service.subscribe0(data));
}, 350);
return deferred.promise;
}
返回的承诺永远不会解决。防反跳功能是第三方功能,可以从NPM下载很多内容,因此我可以肯定它可以正常工作。
是否可能是因为return语句“删除了”函数的作用域?如何避免这种情况并兑现承诺?
答案 0 :(得分:3)
您误解了debounce()
的作用。
debounce()
是一个接受一个函数并返回一个函数的函数。返回的函数将仅在N毫秒的沉默后调用传递的回调(也就是说,如果您按顺序非常快地调用去抖动的函数,则在经过一段时间后,只有最后一次调用才会生效)。
debounce()
本身不会调用您传递的函数。因此,deferred.resolve()
永远不会被呼叫。
答案 1 :(得分:0)
我希望这样:
const getData = data => Promise.resolve( service.subscribe0( data ));
grid.addEventListener( 'scroll', debounce( getData, 350 ));
我们希望网格滚动更新其自身,但要对其进行去抖动处理,以使其不会在服务中充斥着呼叫。因此,由于两个不同的数据调用之间没有链接,因此我们必须对与滚动相关的功能(而不是数据调用)进行去抖动。