async 异步编程的应用
async 异步编程的应用
1.为了解决node.js在实际项目中的异步特性,跳出回调大坑。
2.优雅的维护自己的代码。
3.更好的对自己的代码进行流程控制。
async.waterfall
1.async.waterfall(array,function(err,res){})。
array是函数组成的数组,callback(function)是中途出错或者全部执行完后的回调函数。它的特点是串行执行函数,并且前一个函数的结果会传给下一个函数。示例:
async.waterfall([ function(callback){ callback(null, 'one', 'two'); }, function(arg1, arg2, callback){ callback(null, 'three'); }, function(arg1, callback){ // arg1 now equals 'three' callback(null, 'done'); } ], function (err, result) { // result now equals 'done' });
async.series
1.ayync.series(array or obj,function(err,res){}).
第一个传参可以是数组或者对象,callback返回执行的结果集,属于串行执行,即按顺序执行传入的function代码。与waterfall的区别在于后者能传参到下一个function进行逻辑操作。不过我们可已通过对变量的赋值达到waterfall同样的效果。
let data = [];
data.push(function(callback){callback(null,1);
})
data.push(function(callback){//启用定时器,模拟异步操作setTimeout(function(){callback(null,2);},2000)});
data.push(function(callback){callback(null,3);});async.series(data,function(err,row){console.log(row);
});// 输出结果 与预期正常:[1,2,3]
async.map and async.each
1.这2个方法感觉用法是一致的
2.async.map(task,callback,function(err,res){});
task是可以是数组或一个对象,类似与在for循环里面执行闭包操作。都是同时执行多条异步操作
async.mapSeries and async.eachSeries
1.都是按顺序执行操作
2.用法与map,each 一致。
async.auto
1.很多时候,你逻辑里面,既有waterfull的也有parallel的,那个就要写至少2个async函数调用,复杂的情况下,可能更多,但是async.auto的强大是在于,你定义好相互之间的dependencies,他来帮你决定用parallel还是waterfull。
2.async.auto(ojb);
看一个例子:
async.auto({
func1: function (callback, results) {
callback(null, “abc”, “bbc”);
},
func2: function (callback, results) {
console.log("Print#1:\n" + util.inspect(results));
callback(null, { "puncha": "during" });
},
func3: ["func2", function (callback, results) {
console.log("Print#2:\n" + util.inspect(results));
callback(null, 3);
}],
func4: ["func1", "func3", function (callback, results) {
console.log("Print#3:\n" + util.inspect(results));
callback(null);
}]
});
func1和func2可以并行执行,func3可以和func1并行但是需要等待func2,func4最后执行
结尾
1.以上用法是async比较常用的方法,用上他的话就可以不用担心异步回调大坑了,async不仅可以用于数据库操作,其他异步操作也适用,比如文件读写等。
async 异步编程的应用相关推荐
- 笨笨图片批量抓取下载 V0.2 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程]...
一. 先贴一张图,这个界面就是程序的主界面了: 二. 部分代码说明(主要讲解异步分析和下载): 异步分析下载采取的策略是同时分析同时下载,即未等待数据全部分析完毕就开始把已经分析出来的 ...
- nodejs之async异步编程
2019独角兽企业重金招聘Python工程师标准>>> 1.什么是异步编程? 异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常 ...
- [Async] [Series #1] 初识Async异步编程模型。
前言 前今天,在一次Resource Transfer的会议结尾,有人无意中提到了关于Async的问题,很多人知道有这个概念,但具体是什么,什么时候使用,如何使用,为什么要使用等等却不得而知,甚至有人 ...
- 笨笨图片批量下载器 V0.3 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程] new...
前言 从[笨笨图片批量抓取下载 V0.2 beta]到[笨笨图片批量下载器 V0.3 beta]时间将近2个月,不是说这个升级版本开发了这么久,实在是懒,呵呵: )再加有时候工作忙.学习,多的时间就不 ...
- js:nodejs通过async异步提交事务数据
一,async异步编程 1,异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数.ajax请求等等 waterfall ...
- JavaScript 异步编程--Generator函数、async、await
JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...
- @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?
布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...
- Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...
- Async和Await如何简化异步编程几个实例
引言 C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 同步代码存 ...
最新文章
- 因修改/etc/sudoers权限导致sudo和su不能使用的解决方法
- C#字符ASCII码学习经验
- phalcon安装-遇坑php-config is not installed 解决方法
- Spark机器学习库(MLlib)指南
- 页面体验提升小技巧—渐进式图片
- 信息学奥赛一本通 1315:【例4.5】集合的划分
- C#LeetCode刷题之#88-合并两个有序数组(Merge Sorted Array)
- 凸优化第五章对偶 5.2Lagrange对偶问题
- 机房计算机配置思维导图,运用思维导图培养高中学生信息技术学科核心素养
- Dell G3 3579​的触摸板驱动
- jdk工具keytool和jarsigner帮助(jdk keytooljarsigner tool manual)
- 宏观经济的基本指标及其衡量
- 老照片:一个澳洲人在大清国的徒步旅行
- MPEG4与.mp4
- python中binomial_二项堆python实现——eager binomial heap
- 大数据基础——Hadoop大数据平台搭建
- 数据库备份服务器性能指标,服务器处置性能估算
- 学习opencv.js(1)图像入门
- 网络Socket编程
- 影像组学|特征定义以及提取
热门文章
- opencv 读取CV_16U图像 c++
- 国家网络安全宣传周:勒索病毒利如刀,上网备好技能包
- 持续定义Saas模式云数据仓库+BI
- 《从单体迈向 Serverless 的避坑指南》
- 如何优雅地在云上“摆摊” 直播带货,这些技术很重要
- FAST20 论文学习
- 2019双11,支付宝有哪些“秘密武器”?
- Knative Service 之流量灰度和版本管理
- Kubernetes事件离线工具kube-eventer正式开源
- MongoDB 4.2 新特性解读