nodejs中解决异步嵌套循环和循环嵌套异步的问题

 更新时间:2017年07月12日 15:57:02   作者:意外金喜  
本篇文章主要介绍了nodejs中解决异步嵌套循环和循环嵌套异步的问题,具有一定的参考价值,有兴趣的可以了解一下

众所周知,nodejs异步和循环对于初学者来说是一个很大的问题,今天我们就一起来了解和解决它

当异步和循环同时出现的时候这个问题就会被放大很多倍.

庆幸的是,大神们研究出了async这个第三方模块,解决了node中异步金字塔和循环问题

async这个模块应该是nodejs中使用最多的第三方模块,每个月下载量3000W+

async基础使用 : https://www.jb51.net/article/118526.htm

异步嵌套循环,循环嵌套异步的例子:

var async = require('async'); 
//初始化 
var async_lists = [{ aa: 11, bb: 21 }, { aa: 31, bb: 41 }, { aa: 51, bb: 61 }, { aa: 71, bb: 81 }, { aa: 91, bb: 91 }]; 
var task = []; 
task.push(function (callback) { 
 console.log('第一个task任务'); 
 //循环 
 async.eachSeries(async_lists, function (async_list, cb) { 
  task_a(async_list, cb) 
 }, function (err) { 
  if (err) return callback(err); 
  //重新赋值 
  async_lists = [{ aa: 12, bb: 22 }, { aa: 32, bb: 42 }, { aa: 52, bb: 62 }, { aa: 72, bb: 82 }, { aa: 92, bb: 92 }]; 
  callback() 
 }); 
}) 
task.push(function (callback) { 
 console.log('第二个task任务'); 
 async.eachSeries(async_lists, function (async_list, cb) { 
  task_a(async_list, cb) 
 }, function (err) { 
  if (err) return callback(err); 
  async_lists = [{ aa: 13, bb: 23 }, { aa: 33, bb: 43 }, { aa: 53, bb: 63 }, { aa: 73, bb: 83 }, { aa: 93, bb: 93 }]; 
  callback() 
 }); 
}) 
task.push(function (callback) { 
 console.log('第三个task任务'); 
 async.eachSeries(async_lists, function (async_list, cb) { 
  task_a(async_list, cb) 
 }, function (err) { 
  if (err) return callback(err); 
  callback() 
 }); 
}) 
 
//最外层流程控制 
async.waterfall(task, function (err, result) { 
 if (err) return console.log(err); 
 console.log('成功'); 
}) 
 
function task_a(async_list, cb) { 
 var task2 = []; 
 task2.push(function (cb) { 
  console.log('第一次 : ', async_list); 
  setTimeout(function () { 
 
   cb() 
  }, 1000); 
 }) 
 task2.push(function (cb) { 
  console.log('第二次 : ', async_list); 
  console.log('---------------------------'); 
  setTimeout(function () { 
 
   cb() 
  }, 1000); 
 }) 
 //循环内流程控制 
 async.waterfall(task2, function (err, result) { 
  if (err) return cb(err); 
  cb(); 
 }) 
} 

解释下这个例子:
首先,最外层使用了async.waterfall这个方法控制task数组里的异步任务执行顺序,一共push了3个任务async.waterfall(task, function (err, result) {},每执行完一次task里的任务,重新对async_lists赋值;

然后,每一个task任务里都有一个同样的循环,循环async_lists这个数组里的每一个对象,使用async.eachSeries控制必须循环里所有任务执行完毕才往下执行;

最后,在eachSeries循环里又有一个异步task2任务,这个任务分2步,分别打印了传入进来的async_list的值,而且每次打印都使用setTimeout暂停一秒才执行下一个任务.

预期的结果是 : 首先执行task里的第一个任务,分别打印2次async_lists这个数组里的每个对象,而且每次打印间隔一秒,然后对async_lists重新赋值,执行task里的第二个任务,重复以上操作.3次完成后打印 成功,结束任务.


输出的结果也是预期的结果.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于nodejs的微信JS-SDK简单应用实现

    基于nodejs的微信JS-SDK简单应用实现

    这篇文章主要介绍了基于nodejs的微信JS-SDK简单应用实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Node.js 日志处理模块log4js

    Node.js 日志处理模块log4js

    今天和大家分享一下NodeJS中写日志的一个常用第三方包:Log4js.下面我们就来详细探讨下吧
    2016-08-08
  • Node.js 连接 MySql 统计组件属性的使用情况解析

    Node.js 连接 MySql 统计组件属性的使用情况解析

    这篇文章主要为大家介绍了Node.js 连接 MySql 统计组件属性的使用情况解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 详解nodejs 文本操作模块-fs模块(五)

    详解nodejs 文本操作模块-fs模块(五)

    本篇文章主要介绍了nodejs 文本操作模块-fs模块(五),这里再说最后一个我看来很重要的方法,监听文件或者目录的的方法watchFile。有兴趣的可以了解一下。
    2016-12-12
  • 使用nvm安装node的过程及注意事项

    使用nvm安装node的过程及注意事项

    在学习vue的过程中,最开始的就是要先安装nodejs环境,此处记录安装过程及注意事项,首先需要先卸载程序中卸载先前安装过的nvm,删除文件管理器中安装的文件,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • 在node环境下parse Smarty模板的使用示例代码

    在node环境下parse Smarty模板的使用示例代码

    这篇文章主要介绍了在node环境下parse Smarty模板的使用示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 快速掌握Node.js事件驱动模型

    快速掌握Node.js事件驱动模型

    这篇文章主要为大家详细介绍了Node.js事件驱动模型,首先了解一下传统的线程网络模型,然后再学习了解Node.js事件驱动模型,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • node.js中stream流中可读流和可写流的实现与使用方法实例分析

    node.js中stream流中可读流和可写流的实现与使用方法实例分析

    这篇文章主要介绍了node.js中stream流中可读流和可写流的实现与使用方法,结合实例形式分析了node.js stream流可读流和可写流基本分类、原理、定义、使用方法及相关注意事项,需要的朋友可以参考下
    2020-02-02
  • nodejs对mongodb数据库的增加修删该查实例代码

    nodejs对mongodb数据库的增加修删该查实例代码

    在本篇文章里小编给大家整理的是一篇关于nodejs对mongodb数据库的增加修删该查实例代码,有需要的朋友们可以参考下。
    2020-01-01
  • 使用Node.js创建一个简单的HTTP服务器的示例代码

    使用Node.js创建一个简单的HTTP服务器的示例代码

    Node.js 是一种强大的 JavaScript 运行环境,允许开发者在服务器端运行 JavaScript 代码,它以异步事件驱动的方式处理大量连接,适合构建高效的网络应用程序,在这篇文章中,我们将一起学习如何使用 Node.js 创建一个简单的 HTTP 服务器,并通过示例代码帮你快速上手
    2025-02-02

最新评论