嵌套节点async.eachSeries

与asynchronous模块一起打了半天,但嵌套几个级别时无法正常工作。 由于代码有点冗长的职位,但请裸露在我身边,所有的代码应该运行良好。

所以这工作正常:


     var async = require('async')

     var myarr = [“Outer  -  A”,“Outer  -  B”];
     var myarr2 = [“Inner  -  A”,“Inner  -  B”];
     var innerComplete = true;

     async.eachSeries(myarr,function(item,outerCallback){
         console.log('处理项目'+项目);
         async.series([
            函数(callback){
                 takeTime(2000,item,callback)
             },
            函数(callback){
                 takeTime(1000,item,callback)
             },
            函数(callback){


                 outerCallback();
             }
         ],函数(err){
             console.log(“--- OUTER SEQUENCE ---”)

         })
     },函数(err){
         console.log(“--- OUTER LOOP ---”)

     });

    函数takeTime(ms,msg,callback){
         console.log(“启动”ms + ms + ms +任务);
         setTimeout(function(){ 
             console.log(“Finished”ms + ms + ms +任务);
            回电话();
         }, 女士);
     } 

它按照如下顺序输出一切:

处理项目外 -  A
从Outer  -  A开始2000 ms任务
从Outer  -  A完成了2000毫秒的任务
从Outer  -  A开始1000 ms的任务
从Outer  -  A完成了1000毫秒的任务
处理项目外 -  B
从Outer  -  B开始2000 ms任务
从Outer  -  B完成了2000毫秒的任务
从Outer  -  B开始1000 ms的任务
从Outer  -  B完成1000毫秒的任务
 ---外套---

但是,当我试图嵌套另一个eachSeries循环,如下所示:


     var async = require('async')

     var myarr = [“Outer  -  A”,“Outer  -  B”];
     var myarr2 = [“Inner  -  A”,“Inner  -  B”];
     var innerComplete = true;

     async.eachSeries(myarr,function(item,outerCallback){
         console.log('处理项目'+项目);
         async.series([
            函数(callback){
                 takeTime(2000,item,callback)
             },
            函数(callback){
                 takeTime(1000,item,callback)
             },
            函数(callback){
                 async.eachSeries(myarr2,function(item2,outerCallback2){
                     console.log('处理项目'+ item2);
                     async.series([
                        函数(callback2){
                             takeTime(2000,item2,callback2)
                         },
                        函数(callback2){
                             takeTime(1000,item2,callback2)
                         }
                     ],函数(err){
                         console.log('--- INNER SEQUENCE ---')

                     })
                 },函数(err){
                     console.log(“--- INNER LOOP ---”)
                 });

                 outerCallback();
             }
         ],函数(err){
             console.log(“--- OUTER SEQUENCE ---”)

         })
     },函数(err){
         console.log(“--- OUTER LOOP ---”)

     });

    函数takeTime(ms,msg,callback){
         console.log(“启动”ms + ms + ms +任务);
         setTimeout(function(){ 
             console.log(“Finished”ms + ms + ms +任务);
            回电话();
         }, 女士);
     } 

进入第二个eachSeries循环时,它会丢失执行顺序:

处理项目外 -  A
从Outer  -  A开始2000 ms任务
从Outer  -  A完成了2000毫秒的任务
从Outer  -  A开始1000 ms的任务
从Outer  -  A完成了1000毫秒的任务
处理项目内部 -  A
从Inner  -  A开始2000毫秒的任务
处理项目外 -  B
从Outer  -  B开始2000 ms任务
完成2000毫秒的内部任务
从Inner  -  A开始1000 ms的任务
从Outer  -  B完成了2000毫秒的任务
从Outer  -  B开始1000 ms的任务
 Inner  -  A完成了1000毫秒的任务
 ---内部序列---
从Outer  -  B完成1000毫秒的任务
处理项目内部 -  A
从Inner  -  A开始2000毫秒的任务
 ---外套---
完成2000毫秒的内部任务
从Inner  -  A开始1000 ms的任务
 Inner  -  A完成了1000毫秒的任务
 ---内部序列---

我也尝试了瀑布,mapSeries等,但以相同或以其他方式搞砸了执行顺序。 我做错了什么或不是asynchronous模块支持这种嵌套?

你没有调用outerCallback2 ,你没有调用callbackouterCallback立即调用outerCallback

固定:

 async.eachSeries(myarr, function( item, outerCallback) { ,----------------------------------------' | console.log('Processing item ' + item); | async.series([ | function(callback) { | `--------------, | takeTime(2000, item, callback) | }, | function(callback) { | `--------------, | takeTime(1000, item, callback) | }, | function(callback) { | ,-----------' | | async.eachSeries(myarr2, function( item2, outerCallback2) { | | ,---------------------------------------------' | | | console.log('Processing item ' + item2); | | | async.series([ | | | function(callback2) { | | | takeTime(2000, item2, callback2) | | | }, | | | function(callback2) { | | | takeTime(1000, item2, callback2) | | | } | | | ], function(err) { | | | console.log('---INNER SEQUENCE---') | | `---> outerCallback2(err); // <<< | | }) | | }, function(err){ | | console.log("---INNER LOOP---"); | `---> callback(err); // <<< | }); | } | ], function(err) { | console.log("---OUTER SEQUENCE---") `---> outerCallback(err); // <<< }) }, function(err){ console.log("---OUTER LOOP---") console.log("everything done"); });