gpt4 book ai didi

javascript - 回调函数给出错误 - angularjs

转载 作者:行者123 更新时间:2023-11-28 19:26:50 27 4
gpt4 key购买 nike

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

我知道使用 $interval 服务有一种更简单的方法可以做到这一点,我已经做到了。但是,在这里,具体来说,我正在测试 Angular 回调 - 并不是真正尝试每 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");});

}]);

最佳答案

这是因为在第一次使用函数参数调用 decreaseQ 后,您通过在超时中设置它来调用不带任何参数的 decreaseQ。但是您期望回调并且您调用了导致错误的函数 decreaseQ()

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

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

或者使用绑定(bind)函数

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

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

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

或者使用虚拟匿名函数

(callback||angular.noop)();

关于javascript - 回调函数给出错误 - angularjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27747056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com