角度间隔是否在创建承诺后立即调用方法

时间:2016-06-02 11:40:31

标签: javascript angularjs setinterval

我有这段代码

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秒或者像这样。据我所知,一旦初始化,间隔并不是所有重复的功能,而是在第一次等待相应的间隔时。我错了吗?可能是什么问题?

1 个答案:

答案 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'