需要在javascript中设置计时器,然后清除

需要在javascript中设置计时器,然后清除,javascript,timer,Javascript,Timer,我想用JavaScript创建一个计时器。我看到了setTimeout(fn,100),但不清楚如何包装它,以便它在最后清除自己 我试过了 var buttonTimer = null; $scope.backButton = function() { if(buttonTimer === null){ $history.back(); } buttonTimer = setTimeout(function(buttonTimer){

我想用JavaScript创建一个计时器。我看到了
setTimeout(fn,100)
,但不清楚如何包装它,以便它在最后清除自己

我试过了

var buttonTimer = null; 

$scope.backButton = function() {

    if(buttonTimer === null){
        $history.back();
    }

    buttonTimer = setTimeout(function(buttonTimer){
        buttonTimer = null;
    }, 100);

}

关键是要防止用户过快地使用此功能。。忽略该
100ms
窗口内的所有后续点击,在窗口结束时,清除计时器并继续接受点击

由于您正在进行角度测量,我准备了一个plnkr用于演示:

您的代码几乎正常,唯一的问题是每次单击都会启动一个新的超时。其效果是,回调多次激发并重置
buttonimer

因此,唯一的变化是:

var blocker = null;
$scope.backButton = function() {
  if(blocker == null) {
    blocker = setTimeout(function(){
      blocker = null;
    }, 1500);

    // DO YOUR STUFF HERE
  }    
};

您可以使用lodash/下划线或Ramdajs中的throttle。 比如说

$scope.backButton=_.throttle(100,function(){/* do something here */});