2015-08-21 46 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