反跳并返回

时间:2018-10-16 08:14:22

标签: javascript scope promise debouncing

我对这段代码有疑问:

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

返回的承诺永远不会解决。防反跳功能是第三方功能,可以从NPM下载很多内容,因此我可以肯定它可以正常工作。

是否可能是因为return语句“删除了”函数的作用域?如何避免这种情况并兑现承诺?

2 个答案:

答案 0 :(得分:3)

您误解了debounce()的作用。

debounce()是一个接受一个函数并返回一个函数的函数。返回的函数将仅在N毫秒的沉默后调用传递的回调(也就是说,如果您按顺序非常快地调用去抖动的函数,则在经过一段时间后,只有最后一次调用才会生效)。

debounce()本身不会调用您传递的函数。因此,deferred.resolve()永远不会被呼叫。

答案 1 :(得分:0)

我希望这样:

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

我们希望网格滚动更新其自身,但要对其进行去抖动处理,以使其不会在服务中充斥着呼叫。因此,由于两个不同的数据调用之间没有链接,因此我们必须对与滚动相关的功能(而不是数据调用)进行去抖动。