nodejs异步流程控制
场景:
1、图片上传服务器
2、图片写入磁盘
3、图片写入数据库
在nodejs里面这三种方式都是异步操作,不想java其他语言同步进行,这就需要对异步流程进行控制,保证1,2,3逐步进行。有可能1还没完成,2和3可能就开始了,所以需要控制流程。
异步流程控制对象async
1、串行无关联:async.series(1,2,3按照顺序执行)
2、并行无关联:async.parallel(1,2,3一起跑)
3、串行有关联:waterfall(瀑布流关系,1完成传给2,2完成传给3)
4、parallelLimit:parallelLimit函数和parallel类似,但是它多了一个参数limit。(同一时间只能并行2个或者三个任务)
limit参数限制任务只能同时并发一定数量,而不是无限制并发
先要进行安装:npm install async --save-dev
串行无关联:async.series测试:
let async=require('async');
function exec(){async.series({one:function(done){ii=0;setInterval(function(){console.log('aaa='+new Date());ii++;if(ii==3){clearInterval(this);done(null,'one完毕');}},1000);},two:function(done){jj=0;setInterval(function(){console.log('bbb='+new Date());jj++;if(jj==3){clearInterval(this);done(null,'two完毕');}},1000);}},function(err,rs){console.log(err);console.log(rs);})
}
exec();
console.log('主进程执行完毕');
并行无关联:async.parallel测试:
let async=require('async');
function exec(){async.parallel({one:function(done){ii=0;setInterval(function(){console.log('aaa='+new Date());ii++;if(ii==3){clearInterval(this);done(null,'one完毕');}},1000);},two:function(done){jj=0;setInterval(function(){console.log('bbb='+new Date());jj++;if(jj==3){clearInterval(this);done(null,'two完毕');}},1000);}},function(err,rs){console.log(err);console.log(rs);})
}
exec();
console.log('主进程执行完毕');
串行有关联:waterfall测试:
let async=require('async');
function exec(){//第一个的回调是第二个的参数async.waterfall([function(done){ii=0;setInterval(function(){console.log('aaa='+new Date());ii++;if(ii==3){clearInterval(this);done(null,'one完毕');}},1000);},function(preValue,done){jj=0;setInterval(function(){console.log('bbb='+new Date());jj++;if(jj==3){clearInterval(this);done(null,preValue+'two完毕');}},1000);}],function(err,rs){console.log(err);console.log(rs);})
}
exec();
console.log('主进程执行完毕');
nodejs异步流程控制相关推荐
- nodejs异步流程控制co 模块
万恶的回调 对前端工程师来说,异步回调是再熟悉不过了,浏览器中的各种交互逻辑都是通过事件回调实现的,前端逻辑越来越复杂,导致回调函数越来越多,同时 nodejs 的流行也让 javascript 在后 ...
- 某大型银行深化系统技术方案之八:核心层之异步流程控制机制
传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229 核心层 核心层主要提供后台业务集中处理中最基本.共性的信息处理.流程调度和相关的管理功能 ...
- JavaScript异步流程控制的前世今生
js的流程控制老大难问题就是异步回调. 一个流程过程,往往会出现回调地狱,这个回调异步控制就被提上研究得议程. 目前有实现的回调流程有以下几种 回调函数实现 事件监听 发布订阅 Promise/A+ ...
- 流程控制: jQ Deferred 与 ES6 Promise 使用新手向入坑!
谢谢n͛i͛g͛h͛t͛i͛r͛e͛大大指出的关于Promise中catch用的不到位的错误,贴上大大推荐的文章Promise中的菜鸟和高阶错误,文章很详细说明了一些Promise使用中的错误和指导. ...
- JS_异步任务之流程控制
需知: 1,JavaScript只有一个核心的主线程,但它有存放异步任务的任务队列(task queue). 2,主线程中是正在运行的同步任务(异步任务开始运行则也会变为同步任务),每次同步任务完成后 ...
- Node.js 模块之Nimble流程控制
NodeJS异步的特性有时候会导致程序非常的难看,回调一层套着一层,这个时候就要用流程控制模块来控制究竟是同步还是异步了. Nimble是一个轻量.可移植的函数式流程控制模块.经过最小化和压缩后只有8 ...
- 小程序怎么处理轮训ajax,微信小程序中使用Promise进行异步流程处理的实例详解...
微信小程序中使用Promise进行异步流程处理的实例详解 我们知道,JavaScript是单进程执行的,同步操作会对程序的执行进行阻塞处理.比如在浏览器页面程序中,如果一段同步的代码需要执行很长时间( ...
- Web前端学习笔记11:JavaScript_注释_输入输出_变量_数据类型_关键字_保留字_运算符_流程控制
文章目录 JavaScript基础第01天 1 - 编程语言 1.1 编程 1.2 计算机语言 1.3 编程语言 1.4 翻译器 1.5 编程语言和标记语言区别 总结 2 - 计算机基础 2.1 计算 ...
- 【Go】二、Go流程控制
文章目录 Go流程控制 1.条件语句IF 2.条件语句switch 3.条件语句select 4.循环语句for 5.循环语句range 6.循环控制goto.break.... Go流程控制 1.条 ...
最新文章
- 《OpenCV3编程入门》学习笔记8 图像轮廓与图像分割修复(二)寻找物体的凸包
- c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
- #164 (Div. 2)
- SNMPM 配置 [linux windows solaris]
- thymeleaf的能用在什么地方_细品 Spring Boot+Thymeleaf,还有这么多好玩的细节!
- pyspark minHash LSH 查找相似度
- 1. 批量梯度下降法BGD 2. 随机梯度下降法SGD 3. 小批量梯度下降法MBGD
- 我在 SUN TECH DAY
- java实现8、10、16、2进制之间的相互转换(简单易懂实用快速)
- 14-CoreData兼容iOS9和iOS10
- ipv6寻址_什么是IPV4寻址?
- 60-150-044-使用-Sink-Flink自定义RetractStreamTableSink
- 动态创建表格(各种管理系统常见)
- JavaScript函数和对象
- java接口自动化框架_java接口自动化测试框架及断言详解
- php think run 后台运行问题
- 如何在手机上快速制作小一寸证件照
- ffmpeg解码器使用
- 和老外聊天、发邮件常用英语缩写(超实用)
- arm el2与el3_ARM下的EL/PL概念