我有这段代码
inputElem.on('keydown', function(event) {
if (event.which === 38) { // up
$scope.inc();
promise = $interval($scope.inc(), 300);
} else if (event.which === 40) { // down
$scope.dec();
promise = $interval($scope.dec(), 300);
}
});
inputElem.on('keyup', function(event) {
if (event.which === 38 || event.which === 40) {
$interval.cancel(promise);
}
});
我基本上用它来使用向上和向下箭头将编辑框中的值增加/减少1。因此,当用户按下向上/向下箭头时,值会不断变化。我的问题是它似乎增加/减少了两次值,即使我很快按下其中一个箭头。我在一个inc()和dec()函数中放了一个console.log(),它们确实被调用了两次,即使我把时间改为3秒或者像这样。据我所知,一旦初始化,间隔并不是所有重复的功能,而是在第一次等待相应的间隔时。我错了吗?可能是什么问题?
答案 0 :(得分:1)
您每次都要调用该函数两次。
$scope.inc(); //function called
promise = $interval($scope.inc(), 300); //call it again 300 ms later in the promise;
另外,interval的正确用法是(reference,time),但是你用$ scope.inc()发送整个函数。要通过引用传递函数,就可以消除(),就像Tushar所说的那样,这不是函数被调用两次的原因。你用那种方式编码。
你的倒退和超时和间隔。超时是一次,间隔发生在每个间隔。 'setInterval' vs 'setTimeout'