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

Kim*_*Man 3 javascript timeout intervals angularjs

我正在学习AngularJS.

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

这是一个例子:

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

function someMethod(i) {
    console.log('Executed : ', i);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Dav*_*ker 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);
}
Run Code Online (Sandbox Code Playgroud)

请记住,$ timeout只是setTimeout的可测试性包装器.所以请参阅http://jsfiddle.net/f1yfy6ac/3/以实现此目的.

如果你想使用$ interval而不是那么你可以使用:

$interval(someMethod, 1000) 
Run Code Online (Sandbox Code Playgroud)

无论如何,这将通过我.您不需要在循环中使用它.