nodejs双层循环异步控制并发

上一讲,跟大家说到nodejs一层循环异步控制并发
这次为大家带来双层循环控制并发,并且也适合更多层的循环控制

同样的,也是用到上一讲的知识点:async.mapLimit

双层循环的话,说白了,主要是控制最里面那一层给外面一层的一个返回动作。
这个时候用到Promise,手动控制并告知上一层循环:“我这边结束了,你可以继续下一个了”

Demo如下:

const async = require('async');
//构造一个双层循环集合
let arr = [
   {
     name:'1',
     sub:['a','b','c']
   },
   {
      name:'2',
      sub:['d','e','f']
    },
    {
       name:'3',
       sub:['g','h','I']
     },
    {
       name:'4',
       sub:['j','k','L']
     }
 ]
 forA(arr)
 //第一层循环
  function forA(arr){
  var iterateeFun =  function (item, callback) {
    setTimeout(async() => {
      console.log('第一层' + item.name)
      await forB(item.sub)
      callback(null, item.name);
      }, 1000);
    };
   var allEnd = function (err, results) {
     console.log('第一层全部执行结束:'+results)
   };
  
   async.mapLimit(arr, 1, iterateeFun, allEnd);
 }

 //第二层循环
 function forB(arr){
  return new Promise((resolve,reject)=>{
    var iterateeFun = function (item, callback) {
      console.log('  第二层' + item)
      
      callback(null, item);
    
     };
     var allEnd = function (err, results) {
       console.log('  第二层全部执行结束:'+results)
       //第二层全部执行完成 告知第一层可以继续向下执行
       resolve()
     };
    
     async.mapLimit(arr, 1, iterateeFun, allEnd);
  })
 }

KK资源网分享最优质的的资源,涵盖网站建设、IT技术、主题源码
KK资源吧 » nodejs双层循环异步控制并发

发表评论