Javascript 尝试将带有全局变量的$interval转换为函数

Javascript 尝试将带有全局变量的$interval转换为函数,javascript,angularjs,Javascript,Angularjs,我有一个代码,我想用不同的属性重复几次 我使用的是AngularJS中的$interval,无法将代码段转换为函数。下面我将发布这两个代码,没有函数的代码和我尝试使用函数但给出错误的代码 原始代码 $scope.alarm.times.armed_away.pending_time = null; var pendingTime; var promiseAlarmPendingTime; $scope.alarm.times.armed_away.pending_time = entity.a

我有一个代码,我想用不同的属性重复几次

我使用的是AngularJS中的$interval,无法将代码段转换为函数。下面我将发布这两个代码,没有函数的代码和我尝试使用函数但给出错误的代码

原始代码

$scope.alarm.times.armed_away.pending_time = null;
var pendingTime;
var promiseAlarmPendingTime;

$scope.alarm.times.armed_away.pending_time = entity.attributes.armed_away_pending_time;

promiseAlarmPendingTime = $interval(function(){
   if($scope.alarm.times.armed_away.pending_time >= 0) {
      $scope.alarm.times.armed_away.pending_time -= 1;
      if($scope.alarm.times.armed_away.pending_time > 10) {
         playSound('audio/alarm_pending_time_1.mp3');
      } else if($scope.alarm.times.armed_away.pending_time > 0) {
         playSound('audio/alarm_pending_time_2.mp3');
      } else if($scope.alarm.times.armed_away.pending_time == 0){
         $interval.cancel(promiseAlarmPendingTime);
      }
   } else {
      $scope.alarm.times.armed_away.pending_time = null;
      $interval.cancel(promiseAlarmPendingTime);
      promiseAlarmPendingTime = null;
   }
}, 1000);
我的努力使它与功能一起工作

promiseAlarmPendingTime = $interval($scope.fnAlarmPendingTime(
   $scope.alarm.times.armed_away.pending_time,
   promiseAlarmPendingTime), 1000);

$scope.fnAlarmPendingTime = function(pendTime, promise){
   if(pendTime >= 0) {
      pendTime -= 1;
      if(pendTime > 10) {
         playSound('audio/alarm_pending_time_1.mp3');
      } else if(pendTime > 0) {
         playSound('audio/alarm_pending_time_2.mp3');
      } else if(pendTime == 0){
         $interval.cancel(promiseAlarmPendingTime);
      }
   } else {
      pendTime = null;
      $interval.cancel(promise);
      promise = null;
   }
};
该函数自身重复1次,然后给出一个错误:

TypeError: f is not a function

我还尝试删除函数中的整个代码,但出现了相同的错误。可能是语法问题?

您有两个选择:

1) 调用调用您的函数并传递参数的函数。
2) 在
$interval
调用中传递参数

$interval
具有以下签名:
$interval(函数、延迟、[count]、[invokeApply]、[parameters])
。您已经知道
函数
延迟
是什么-
计数
,如果设置为正非零数,则间隔应运行的次数
invokeApply
函数
包装(或不包装)在
$scope.$apply()
中,以便您可以控制脏模型检查,脏模型检查是导致视图更新的原因。最后,
参数
是要传递给函数的参数

示例1
angular.module('app',[])
.controller('ctrl',函数($interval,$scope){
$scope.counter=0;
让promise=$interval(()=>incrementCounter(promise),1000);
函数递增计数器(承诺){
$scope.counter++;
如果($scope.counter==10){
$interval.取消(承诺);
}
}
});

计数器:{{Counter}}

调用
$interval
的是函数的结果,而不是函数本身。第一个参数必须是函数,而不是函数的返回。我如何实现这一点?我很困惑哇,第一个例子。谢谢但是在我的代码中传递的第一个变量是动态的,可以是一个或另一个,然后在函数中我需要更改该变量,而不是将值存储在函数中。不同的变量名称可以是:$scope.alarm.times.armed_away.pending_time或$scope.alarm.times.armed_away.trigger_time等。我希望在函数中设置传递的变量而不是pendTime。在
$interval
的每次迭代中调用该函数,因此,如果传递的参数发生更改,将传递更新的值。但是,如果它们是
$scope
级别的变量,为什么还要将它们传递给函数呢?我声明$scope.pendTime(示例)为60,并将其传递给函数,函数将每秒从该变量中减去1,直到它达到0。一旦将其作为参数传递,它将成为该函数的局部变量。如果您想要更新
$scope.pendTime
,那么甚至不要将其作为参数传递。只需在函数中直接访问它。