我正在写一个angularjs控制器,它正在轮询东西。轮询函数调用自身超时。以下是两个例子。第一个超出调用堆栈大小,但第二个示例没有。这是为什么?
示例1(超过调用堆栈大小):
myApp.controller('Ctrl1', function($scope, $timeout) {
$scope.value = 1;
function poll() {
$scope.value++;
$timeout(poll(), 1000);
}
poll();
});
示例2(工作正常):
myApp.controller('Ctrl1', function($scope, $timeout) {
$scope.value = 1;
function poll(){
$timeout(function() {
$scope.value++;
poll();
}, 1000);
};
poll();
});
答案 0 :(得分:6)
您没有传递函数,而是传递了返回值(undefined
)。这意味着你立即调用它,因为它自称,好吧,这是你的堆栈溢出。
更改
$timeout(poll(), 1000);
到
$timeout(poll, 1000);
顺便说一下,你可以重写
function poll() {
$scope.value++;
$timeout(poll, 1000);
}
poll();
以稍微优雅的方式,不污染外部范围:
(function poll() {
$scope.value++;
$timeout(poll, 1000);
})();
答案 1 :(得分:0)
将函数放在$ timeout():Sou使它像:
$timeout(function(){
pool();
// You can also add some other things here...
}, 1000):