解决nodejs中异步嵌套循环和异步嵌套循环的问题
众所周知,nodejs异步和循环对于初学者来说是一个大问题。今天我们将一起理解并解决它
当异步和循环同时出现时,这个问题会被放大很多倍。
幸运的是,大神们开发了async,一个第三方模块,解决了节点中的异步金字塔和循环问题
Async应该是nodejs中使用最多的第三方模块,月下载量3000W W。
Async foundation使用://www . JB 51 . net/article/118526 . htm。
异步嵌套循环,循环嵌套异步的例子:
var async=require(' async ');//initialize varasync _ list=[{aa: 11,bb: 21},{aa: 31,bb: 41},{aa: 51,bb: 61},{aa: 71,bb3360 81},{ aa 33。var task=[];Task.push(函数(回调){console.log('第一个任务');//loop async .每个系列(async _ list,function (async _ list,CB) {task _ a (async _ list,CB)},function(err){ if(err)return callback(err);//重新分配async _ list=[{aa: 12,bb: 22},{aa: 32,bb: 42},{aa: 52,bb: 62},{aa: 72,bb: 82},{ aa 33。callback()});}) task.push(函数(回调){console.log('第二个任务');async . EachSeries(async _ list,function (async_list,cb) { task_a(async_list,cb) },function(err){ if(err)return callback(err);async _ list=[{ aa : 13,bb: 23 },{ aa: 33,bb: 43 },{ aa: 53,bb: 63 },{ aa: 73,bb: 83 },{ aa: 93,bb : 93 }];callback()});}) task.push(函数(回调){console.log('第三个任务');async . EachSeries(async _ list,function (async_list,cb) { task_a(async_list,cb) },function(err){ if(err)return callback(err);callback()});})//最外层的进程控制async .瀑布(task,function (err,result){ if(err)return console . log(err);Console.log(“成功”);})函数task_a(async_list,CB){ var task 2=[];任务2。Push (function (CB) {console.log('第一次: ',async _ list);setTimeout(function () { cb() },1000);})任务2。push(function(CB){ console . log(' second : ',async _ list);console . log('-');setTimeout(function () { cb() },1000);})//异步。瀑布(任务2,函数(err,result) {if (err)返回CB(err);CB();})}解释这个例子:首先,最外层使用async .瀑布方法来控制任务数组中异步任务的执行顺序。总共有三个异步任务。瀑布(task,function (err,result) {)是推式的,每次执行任务中的任务时都会重新分配async _ lists
然后,每个任务都有相同的循环,循环async _ lists数组中的每个对象。使用async.eachSeries控件,循环中的所有任务必须在执行前执行;
最后,每个Series循环中还有一个异步task2任务,分为两步,分别打印传入的async_list值,使用setTimeout暂停一秒后再执行下一个任务。
预期的结果是,首先执行任务中的第一个任务,将async _ list数组中的每个对象打印两次,每次打印间隔为一秒,然后重新分配async _ list的值,执行任务中的第二个任务,并重复上述操作。三次后,打印成功,任务结束。
输出结果也是预期的。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:解决nodejs中异步嵌套循环和异步嵌套循环的问题是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。