2016-12-01 76 views
1

我试图在每次迭代中实现一个嵌套的for循环。在JavaScript中的每次迭代中嵌套的for循环延迟

到目前为止,我的东西想出了这样

var maxLoops = 10 ; 
var counter = 0; 
var counter2 = counter; 

var maxLoops = 10 ; 
var counter = 0; 
var counter2 = counter; 

(function nNext() { 

    if (counter == maxLoops) return 
    counter2 = counter - 1; 

    setTimeout(() => (function next() { 

    if (counter2 >= maxLoops) return; 

    setTimeout(() => { 
      console.log("Nester counter :" + counter2); 
      counter2++ 
      next() 
    }, 100) 

    })(), 1) 
    counter++; 
    nNext(); 

})(); 

然而,它不能正常工作。我试图做一个气泡排序的可视化表示,并且我需要这个延迟以便看到如果数组立即排序而没有这个延迟,那么每个步骤都是不可能的。实际上有可能实现这样的事情吗?或者也许有更好的方法来做到这一点?

+1

定义“工作不正常”? –

+0

您正在调用'nNext',然后以递归方式再次调用它。那真的是你想要的吗? – 2016-12-01 19:17:06

+0

另外,在外层'setTimeout'中,传递一个箭头函数,该函数具有一个可立即调用名为'next'的函数的主体。为什么?看起来像箭头函数可以被删除,以及立即调用'next',并且只传递'function next(){...}'。 – 2016-12-01 19:19:41

回答

0

你已经有了结构似乎有点复杂,这应该做到你在找什么:

var maxLoops = 10, 
 
    counter = 0, 
 
    counter2 = 0; 
 

 
function outerNext() { 
 
    if (counter == maxLoops) return; 
 
    counter2 = counter - 1 
 
    innerNext() 
 
} 
 

 
function innerNext() { 
 
    if (counter2 >= maxLoops) { 
 
    outerNext() 
 
    } 
 
    else { 
 
    counter2++; 
 
    console.log("Nester counter :" + counter2); 
 
    setTimeout(innerNext, 500) 
 
    } 
 
} 
 
outerNext()