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 异步编程的应用相关推荐

  1. 笨笨图片批量抓取下载 V0.2 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程]...

    一.     先贴一张图,这个界面就是程序的主界面了: 二.     部分代码说明(主要讲解异步分析和下载): 异步分析下载采取的策略是同时分析同时下载,即未等待数据全部分析完毕就开始把已经分析出来的 ...

  2. nodejs之async异步编程

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是异步编程? 异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常 ...

  3. [Async] [Series #1] 初识Async异步编程模型。

    前言 前今天,在一次Resource Transfer的会议结尾,有人无意中提到了关于Async的问题,很多人知道有这个概念,但具体是什么,什么时候使用,如何使用,为什么要使用等等却不得而知,甚至有人 ...

  4. 笨笨图片批量下载器 V0.3 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程] new...

    前言 从[笨笨图片批量抓取下载 V0.2 beta]到[笨笨图片批量下载器 V0.3 beta]时间将近2个月,不是说这个升级版本开发了这么久,实在是懒,呵呵: )再加有时候工作忙.学习,多的时间就不 ...

  5. js:nodejs通过async异步提交事务数据

    一,async异步编程 1,异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数.ajax请求等等 waterfall ...

  6. JavaScript 异步编程--Generator函数、async、await

    JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...

  7. @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?

    布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!​zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...

  8. Atitit. Async await 优缺点 异步编程的原理and实现 java c# php

    Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...

  9. Async和Await如何简化异步编程几个实例

    引言 C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 同步代码存 ...

最新文章

  1. 因修改/etc/sudoers权限导致sudo和su不能使用的解决方法
  2. C#字符ASCII码学习经验
  3. phalcon安装-遇坑php-config is not installed 解决方法
  4. Spark机器学习库(MLlib)指南
  5. 页面体验提升小技巧—渐进式图片
  6. 信息学奥赛一本通 1315:【例4.5】集合的划分
  7. C#LeetCode刷题之#88-合并两个有序数组(Merge Sorted Array)
  8. 凸优化第五章对偶 5.2Lagrange对偶问题
  9. 机房计算机配置思维导图,运用思维导图培养高中学生信息技术学科核心素养
  10. Dell G3 3579​的触摸板驱动
  11. jdk工具keytool和jarsigner帮助(jdk keytooljarsigner tool manual)
  12. 宏观经济的基本指标及其衡量
  13. 老照片:一个澳洲人在大清国的徒步旅行
  14. MPEG4与.mp4
  15. python中binomial_二项堆python实现——eager binomial heap
  16. 大数据基础——Hadoop大数据平台搭建
  17. 数据库备份服务器性能指标,服务器处置性能估算
  18. 学习opencv.js(1)图像入门
  19. 网络Socket编程
  20. 影像组学|特征定义以及提取

热门文章

  1. opencv 读取CV_16U图像 c++
  2. 国家网络安全宣传周:勒索病毒利如刀,上网备好技能包
  3. 持续定义Saas模式云数据仓库+BI
  4. 《从单体迈向 Serverless 的避坑指南》
  5. 如何优雅地在云上“摆摊” 直播带货,这些技术很重要
  6. FAST20 论文学习
  7. 2019双11,支付宝有哪些“秘密武器”?
  8. Knative Service 之流量灰度和版本管理
  9. Kubernetes事件离线工具kube-eventer正式开源
  10. MongoDB 4.2 新特性解读