在for循环中使用Angular的$ timeout执行方法

时间:2014-11-30 03:32:24

标签: javascript angularjs timeout intervals

我正在学习AngularJS。

我想要做的是使用$ timeout在for循环中执行一个方法。

以下是示例:

for(var i = 0; i < 10; i++) {
    $timeout(function(i) {
        someMethod(i);
    }, 1000);
}

function someMethod(i) {
    console.log('Executed : ', i);
}

但我不能传递变量'i'。我怎样才能做到这一点?另外,我想知道如何用Angular $ interval()来解决这个问题。

谢谢!

2 个答案:

答案 0 :(得分:8)

你需要将它包装在一个闭包函数中,传入i变量,然后它将在新函数的范围内变得可用..例如

for(var i = 0; i < 10; i++) {
    (function(i){  // i will now become available for the someMethod to call
        $timeout(function() {
            someMethod(i);
        }, i * 1000);
    })(i); // Pass in i here
}

function someMethod(i) {
    console.log('Executed : ', i);
}

请记住,$ timeout只是setTimeout的可测试性包装器。因此,请参阅http://jsfiddle.net/f1yfy6ac/3/了解此情况。

如果您想要使用$ interval,那么您可以使用:

$interval(someMethod, 1000) 

无论如何,这将会传递给我。你不需要在循环中使用它。

答案 1 :(得分:1)

使用$ interval:

var i=0;
$interval(function(){
    someMethod(i++);
}, 1000, 10);


function someMethod(i) {
    console.log('Executed : ', i);
}

使用自执行函数,如Dave所说(带有for循环的$ interval): 您可以将所有调用的迭代限制为1,作为$ interval

的第三个参数
for(var i = 0; i < 10; i++) {
    (function(i){  
        $interval(function(){
            someMethod(i);
        }, 1000, 1);
    })(i); 
}