态
我似乎无法获得超时和一起工作的循环。如果我删除循环,则它可以工作,或者删除超时,则可以正常工作。我在一起会得到一个无限循环,如果它的内部循环内部,它似乎曾经运行过超时函数。
任何帮助将不胜感激!
function doTask (list) {
if (list) {
while (list.length > 0) {
(function(list){
$timeout(function() {
list.splice(0, 1);
console.log("timeout...")
}, 5000);
})(list);
}
}
}
您应该使用递归循环。另外,您应该检查list.length
,因为[]
是一个真值。
function doTask(list) {
if (list.length) {
setTimeout(function() {
list.splice(0, 1);
console.log("timeout...")
doTask(list);
}, 500);
}
}
var list = [1,2,3,4,5]
doTask(list);
当调用Dotask时,它将进入堆栈以进行运行。现在,在每次循环迭代中,您正在注册一个超时,该DoTask完成后将执行。但是您从来没有机会超时运行,因此列表的长度永远不会减少,这就是为什么它永远运行的原因。
希望这阐明您的查询。