$timeout inside will loop 创建无限循环

$timeout inside will loop creates infinite loop

我似乎无法让超时和循环一起工作。如果我删除循环它会工作,或者如果我删除超时它会工作。我将一起得到一个无限循环,如果超时函数在 while 循环内部,它似乎不会运行。

如有任何帮助,我们将不胜感激!

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 时,它进入堆栈 运行ning。现在在每个循环迭代中,您都在注册一个超时,该超时将在此 doTask 完成时执行。但是您从来没有给 运行 超时的机会,因此列表的长度从未减少,这就是为什么它永远 运行ning 的原因。

希望这能澄清您的疑问。