内部$超时会循环创建无限循环



我似乎无法获得超时和一起工作的循环。如果我删除循环,则它可以工作,或者删除超时,则可以正常工作。我在一起会得到一个无限循环,如果它的内部循环内部,它似乎曾经运行过超时函数。

任何帮助将不胜感激!

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完成后将执行。但是您从来没有机会超时运行,因此列表的长度永远不会减少,这就是为什么它永远运行的原因。

希望这阐明您的查询。

最新更新