我似乎无法让超时和循环一起工作。如果我删除循环它可以工作或如果我删除超时它将工作。我将一起得到一个无限循环,并且看起来似乎超时函数在其内部的while循环中运行。
任何帮助将不胜感激!
function doTask (list) {
if (list) {
while (list.length > 0) {
(function(list){
$timeout(function() {
list.splice(0, 1);
console.log("timeout...")
}, 5000);
})(list);
}
}
}
答案 0 :(得分:4)
你应该使用递归来循环。此外,您应该检查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);
答案 1 :(得分:2)
您的代码永远不会有机会运行超时功能。
当调用doTask时,它会进入堆栈运行。现在,在每次循环迭代中,您将注册一个超时,该超时将在此doTask完成时执行。但是你从来没有机会超时运行,因此列表的长度从未减少,这就是它永远运行的原因。
希望这能澄清您的疑问。