回调函数给出错误 - angularjs

callback function gives an error - angularjs

我在 angular 中使用 $timeout 服务每 1/10 秒将一个变量从 100 减少到 1。

我知道有一种使用 $interval 服务更简单的方法,我已经做到了。但是,在这里,具体来说,我正在 angular 中测试回调 - 并不是真的试图每 1/10 秒将变量从 100 减少到 1。

具体来说,我希望在 $timeout 函数休眠(1/10 秒)时调用回调

我的问题是为什么在使用回调时出现 "undefined is not a function" 错误。我在下面包含了 JS 代码。它也在 JSbin here

这是JS代码:

 var testApp = angular.module('testApp', []);

 testApp.controller('testCtrl', ['$scope', '$timeout', function($scope, $timeout) {


  var q = 100;

  function decreaseQ(callback) {
    $scope.someThing = q;


    if(q>0){ $timeout(decreaseQ, 100);q--;}

   callback();

  }

  decreaseQ(function(){console.log("Hello World");});

}]);

这是因为在第一次使用函数参数调用 decreaseQ 之后,您通过在 timeout.But 中设置它来调用 decreaseQ 而不使用任何参数,您期望回调并调用导致错误的函数 decreaseQ()

相反,您只需要将函数作为回调传递。

  if (q-- > 0) {
     $timeout(function() {
       decreaseQ(callback); //Pass the callback as argument
     }, 100);
   }

或者使用绑定函数

 $timeout(angular.bind(null, decreaseQ, callback), 100);

或者如果没有通过添加检查提供回调,则不运行。

 if(angular.isFunction(callback)) { callback(); }

或者使用虚拟匿名函数

(callback||angular.noop)();