我可以将参数传递给使用_.lodash去抖动的函数吗?

17 javascript angularjs lodash

我一直在尝试使用_lodash.debounce(),我让它工作.但是我不确定它是否以最好的方式工作.我查看了lodash网站上的示例,它们似乎只是简单的示例,不传递参数.这就是我所拥有的:

$scope.parsePid = _.debounce(function () {
    $scope.$apply(function () {
        var pid = $scope.option.sPidRange;
        if (pid == null || pid === "") {
            $scope.pidLower = null;
            $scope.pidUpper = null;
        }
        else if (pid.indexOf("-") > 0) {
            pid = pid.split("-");
            $scope.pidLower = parseInt(pid[0]);
            $scope.pidUpper = parseInt(pid[1]);
        }
        else {
            $scope.pidLower = parseInt(pid);
            $scope.pidUpper = null;
        }
    });
}, 1500);
Run Code Online (Sandbox Code Playgroud)

上面的代码返回一个$scope.parsePid被去抖动的函数.请注意,在第4行,我得到了值$scope.option.SPidRange并在函数中使用它.我真的想以某种方式传递这个参数而不是这样.

我把这个函数称为:

$scope.$watch("option.sPidRange", function (pid) {
    if (pid !== null) {
        $scope.parsePid();
    }
});
Run Code Online (Sandbox Code Playgroud)

这里的值pid应该等于 $scope.parsePid

我想将这个pid的值传递给debounced函数,但我不知道该如何做到这一点.我尝试了一些不同的东西,但去抖功能会出错.

是否可以将参数传递到去抖动function $scope.parsePid()

Ila*_*mer 11

UPDATE

你应该将一个参数传递给函数: _.debounce(function (pid) {

去抖动的一个例子

$scope.parsePid = _.debounce(function(pid){
  $scope.$apply(function(){
    if (pid === null || pid === "") {
      $scope.pidLower = null;
      $scope.pidUpper = null;
    } else if (pid.indexOf("-") > 0) {
      pid = pid.split("-");
      $scope.pidLower = parseInt(pid[0],10);
      $scope.pidUpper = parseInt(pid[1],10);      
    } else {
      $scope.pidLower = parseInt(pid,10);
      $scope.pidUpper = null;
    }      
  });
},1500);
Run Code Online (Sandbox Code Playgroud)

我会使用内置的$ timeout

$ timeout的示例

var promise;

$scope.parsePid = function(pid){
  $timeout.cancel(promise);
  promise = $timeout(function(){     
    if (pid === null || pid === "") {
      $scope.pidLower = null;
      $scope.pidUpper = null;
    } else if (pid.indexOf("-") > 0) {
      pid = pid.split("-");
      $scope.pidLower = parseInt(pid[0],10);
      $scope.pidUpper = parseInt(pid[1],10);      
    } else {
      $scope.pidLower = parseInt(pid,10);
      $scope.pidUpper = null;
    }
  },1500);
};
Run Code Online (Sandbox Code Playgroud)

  • 我相信具有参数的去抖动函数存在潜在且重大的问题.也就是说,想象一下快速连续调用:`$ scope.parsePid(1);``$ scope.parsePid(2);``$ scope.parsePid(1);`应用程序应该只解析pid 1吗?或者它应该在单独的去抖队列中解析pid 1和2?这是我最近在我创建的代码中发现的类似问题(使用参数去抖动). (3认同)