我正在使用AngulaJs和Ionic。
我试图每隔3秒调用一次函数10次(这就是为什么我没有使用$ interval)。事实是,下面的代码只调用一次函数(调用控制台的调试代码被调用10次)。
for (i = 0; i < 10; i++)
{
$timeout(function () {
$scope.play(); // this is the called function
console.log("progress bar: " + i);
}, 3000);
}
任何帮助将不胜感激,
提前致谢,
Pagugim
答案 0 :(得分:4)
For循环将一起启动10个超时。但似乎你希望他们一个接一个地执行。对于这种情况,您可以使用递归。
var count = 0;
replay();
function replay() {
$timeout(function () {
if(count < 10) {
$scope.play();
count++;
replay(); // call this function again
console.log("progress bar: " + $scope.progressVal);
}
}, 3000);
}
答案 1 :(得分:4)
我试图每隔3秒调用一次函数10次
您可以使用count
的可选$interval
参数。
var i=0;
function reportProgress() {
$scope.play(); // this is the called function
console.log("progress bar: " + i);
i++;
};
$interval(reportProgress, 3000, 10);
来自文档:
$间隔
用法
$interval(fn, delay, [count], [invokeApply], [Pass]);
count (可选)重复的次数。如果未设置,或0,将重复 无限期。 (默认值:0)
答案 2 :(得分:1)
实际上,$scope.play()
被称为10次,但几乎同时被召唤。要每隔3秒调用一次该函数,您可以使用闭包来保持值i
并将超时设置为3000*i
。我想这就是你想要的:
for (i = 0; i < 10; i++) {
(function(i) {
$timeout(function() {
$scope.play();
console.log("progress bar: " + i)
}, 3000 * i);
})(i);
}
Jsfiddle:https://jsfiddle.net/ealonwang/ens9wu0g/15/。每3秒观察一次值和控制台日志更改。