回调函数给出错误 - 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)();
我在 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)();