【问题标题】:callback function gives an error - angularjs回调函数给出错误 - angularjs
【发布时间】:2015-01-02 18:50:45
【问题描述】:

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

我知道使用 $interval 服务有一种更简单的方法可以做到这一点,我已经做到了。但是,在这里,特别是,我正在测试角度回调 - 并不是真的试图每 1/10 秒将变量从 100 减少到 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");});

}]);

【问题讨论】:

    标签: javascript jquery angularjs function callback


    【解决方案1】:

    那是因为在第一次使用函数参数调用 decreaseQ 之后,您通过在超时中设置它来调用 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)();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 2019-06-30
      相关资源
      最近更新 更多