回调函数给出错误 - angularjs

时间:2015-01-02 18:50:46

标签: javascript jquery angularjs function callback

我在角度中使用$ timeout服务,每1/10秒将变量从100减少到1。

我知道有一种更简单的方法可以使用$ interval服务来完成这项工作,而且我已经完成了。但是,在这里,具体来说,我正在测试角度回调 - 并没有真正尝试将变量从100减少到每1/10秒1次。

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

我的问题是为什么我得到一个"未定义的不是一个函数"使用回调时出错。我在下面包含了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");});

}]);

1 个答案:

答案 0 :(得分:3)

这是因为在第一次调用带有函数参数的decreaseQ之后,你通过在超时中设置它来调用decreaseQ而没有任何参数。但是你期望一个回调并调用函数{{ 1}}导致错误。

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

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(); }