2015-08-21 45 views
0

我想做一個非常簡單的代碼,在JavaScript中有兩個嵌套循環,它們打印出當前所在的索引。 (這是我想要做的其他事情的基礎)。內部循環有一個計時器,所以它應該等待1秒鐘,然後再打印每個數字。使用async.js的嵌套循環

我希望這樣的輸出:

outer count: 0 
inner count: 0 
inner count: 1 
inner count: 2 
inner count: 3 
inner count: 4 
in out 
outer count: 1 
inner count: 0 
inner count: 1 
inner count: 2 
inner count: 3 
inner count: 4 
in out 

等,但這沒有發生。我的代碼中是否有一些明顯的錯誤?可以異步,而功能甚至可以嵌套?請幫忙! :(

這是我到目前爲止的代碼:

var count = 1; 
     async.whilst(
     function() {return count < 5}, 
     function(callback){ 


      var icount = 0; 

      console.log("outer count:" + count); 

      async.whilst(
       function() { return icount < 5; }, 
       function (callback) { 
        console.log("inner count:" + icount); 
        icount++; 
        setTimeout(callback, 1000); 
       }, 
       function (err) { 
        // 5 seconds have passed 
        console.log("in out"); 
       } 
      ); 

      count++; 

      callback(); 

     }, 
     function(err){ 
      console.log("out out"); 
     } 
     ); 
+0

調用'callback'在異步回調? – Bergi

回答

5
var count = 1; 
     async.whilst(
     function() {return count < 5}, 
     function(outer_callback){ 


      var icount = 0; 

      console.log("outer count:" + count); 

      async.whilst(
       function() { return icount < 5; }, 
       function (callback) { 
        console.log("inner count:" + icount); 
        icount++; 
        setTimeout(callback, 1000); 
       }, 
       function (err) { 
        // 5 seconds have passed 
        console.log("in out"); 
        outer_callback(); // <--- here 
       } 
      ); 

      count++; 


     }, 
     function(err){ 
      console.log("out out"); 
     } 
     ); 

async.whilst是不會阻止的,這意味着它們的所有5個被安排同時運行

我所做的更改是現在在代碼中,外循環迭代僅在內循環迭代完成時完成。

+0

非常感謝你,這工作完美:) – cmperezg

+0

我在這個答案中發現了一個錯誤,我把這裏修復代碼: –

0

使用async.js的嵌套循環:

var i = 0; 
    async.whilst 
    (
     function() {return i < 3}, 

     function(next_i) 
     { 
      var j = 0; 
      async.whilst 
      (
       function() { return j < 3; }, 
       function (callback) 
       { 
        console.log(i +'/'+ j); 
        j++; 
        setTimeout(callback,0); 
       }, 
       function() 
       { 
        i++; 
        next_i(); 
       } 
      ); 
     } 
    ); 

的console.log

0/0 
0/1 
0/2 
1/0 
1/1 
1/2 
2/0 
2/1 
2/2