废话不多说,直接开始

这个模块有几种方法。分别用于的不通的情况自己喜欢怎么用就怎么用

第一个方法,series  这个方法用于串行切无关联。什么意思那就是,里面的方法是一个一个执行的,每一个方法相互不干扰。没有关系

使用起来也是很简单,我们看一下下面的内容


async.series({
    fun1:(callback) =>{
        console.log('one');
        callback(null,{'name':'cyd'});
    },
    fun2:(callback) =>{
        console.log('二');
        callback(null,{'age':20});
    },
    fun3:(callback) =>{
        console.log('三');
        callback(null,{'phone':'15655243356'});
    }
},function(err,res){
    if(err){
        console.log('err:'+err);
    }else{
        console.log(res);
        // {
        //     fun1: { name: 'cyd' },
        //     fun2: { age: 20 },
        //     fun3: { phone: '15655243356' }
        // }
    

    var arr = [];
        for(var item in res){
            arr.push(res[item])
        }
        console.log('return:'+ JSON.stringify(arr));
    //  return:[{"name":"cyd"},{"age":20},{"phone":"15655243356"}]
 
    }
})
 

在上面我们进行了他们一个一个执行相互不干扰,在执行完成以后,结果以对象的方式返回到回调中。

第二个是并行方法parallel

这个的意思就是,里面的方法是一是一起执行的。他们也是相互不干扰的,结果以对象的方式返回到回调中。

var async = require("async");

async.parallel({
fun1:(callback) =>{
console.log('one');
callback(null,{'name':'cyd'});
},
fun2:(callback) =>{
console.log('二');
callback(null,{'age':20});
},
fun3:(callback) =>{
console.log('三');
callback(null,{'phone':'15655243356'});
}
},function(err,res){
if(err){
console.log('err:'+err);
}else{
     console.log(res); // { fun1: { name: 'cyd' },fun2: { age: 20 }, fun3: { phone: '15655243356' }}
var arr = [];
for(var item in res){
arr.push(res[item])
}
console.log('return:'+ JSON.stringify(arr)); //return:[{"name":"cyd"},{"age":20},{"phone":"15655243356"}]
console.timeEnd('parallel');
}
})

上面的方法都是同时执行的。这样会大大的减少运行时间。

下一个方法

waterfall 这个方法也是串行的但是这个下一个方法必须接受上一个方法的返回值。
async.waterfall([
(call) =>{
call(null,'one')
},
(one,call) =>{
call(null,one+'| two')
},
(two,call) =>{
call(null,two+'| three')
}
],function(err,res){
if(err){
console.log(err);
}else{
console.log(res); //one |two | three
} })

这个方法串行的写法必须以数组的方式去写。

下一个是auto的方法这个方法可以串行和并行放在一起里面可以有串行和并行

async.auto({
funa:function(callback){
console.log('我是第一个');
setTimeout(()=>{
callback(null,{'name':'玉帝'})
},2000)
},
funb:function(callback){
console.log('我也是第一个执行');
setTimeout(() =>{
callback(null,{'age':22});
},1000)
},
func:["funa", function(result,callback){
console.log('我是在第二个执行完执行');
setTimeout(() =>{
callback(null,{'phone':'15655321145'})
},2000)
}],
fund:['func',function(result,callback){
console.log('我是最后一个执行');
setTimeout(() =>{
callback(null,{'password':'yu1234560.'});
},3000)
}]
},
function(err,res){
if(err){
console.log('错误:'+err);
}else{
console.log('返回值:'+ JSON.stringify(res));
} }
)

在上面的代码中,funa和funb是一起执行,func的写法是说,当funb执行完成开始执行func,func执行完成,执行fund。

这样让我们在开发中更好的控制异步操作。

node的async模块的更多相关文章

  1. [Nodejs] node的fs模块

    fs 模块 Node.js 提供一组类似 UNIX(POSIX)标准的文件操作 API. Node 导入文件系统模块(fs).Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如 ...

  2. node之path模块

    node之path模块 原文链接 //引用该模块 var path = require("path"); 1.路径解析,得到规范化的路径格式 对window系统,目录分隔为'', ...

  3. 运用node的文件系统模块批量修改文件名

      如果我们需要大批量修改一个文件中的名称,比如,删除文件名中的副本时,就可以借助node的文件系统模块,快捷快速的完成. 首先建立一个js文件(changeName.js),代码如下: // 引入f ...

  4. Node.js的模块载入方式与机制

    Node.js中模块可以通过文件路径或名字获取模块的引用.模块的引用会映射到一个js文件路径,除非它是一个Node内置模块.Node的内置模块公开了一些常用的API给开发者,并且它们在Node进程开始 ...

  5. Node.js Web模块

    什么是Web服务器? Web服务器是处理由HTTP客户端发送的,如web浏览器的HTTP请求的软件应用程序,并返回响应于客户端网页. Web服务器通常伴随着图片,样式表和脚本的HTML文档. 大多数W ...

  6. Node.js工具模块

    在Node.js的模块库中提供实用的模块数量. 这些模块都是很常见的,并同时开发基于任何节点的应用程序频繁使用. S.N. 模块的名称和说明 1 OS Module提供基本的操作系统相关的实用功能 2 ...

  7. node.js基础模块http、网页分析工具cherrio实现爬虫

    node.js基础模块http.网页分析工具cherrio实现爬虫 一.前言      说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherri ...

  8. Node.js:模块

    概要:本篇博客主要介绍node.js的模块 1.创建模块 在node.js中创建一个模块非常简单,因为一个文件就是一个模块.我们只需要明白如何从其他文件中获取这个模块.Node.js提供了 expor ...

  9. node.js之模块

    node.js之模块 1.自定义模块的设置 加载自定义模块利用require: eg: require('./custom_module.js') 2.从模块外部访问模块内的成员 2.1使用expor ...

随机推荐

  1. 利用oracle数据库闪回功能将oracle数据库按时间点恢复

    oracle更新脚本把原数据冲了,并且没有备份,急煞我也         解决办法:         oracle数据库有闪回功能:   select * from tab 可以查出已被删除的表    ...

  2. 简单的Linq查询语句

    下面我来我大家介绍几种简单的查询方式. 1.简单语法 这个LINQ语句的第一个关键字是from,from后面加的是范围变量,范围变量后加in,后加上事先实例化的模型,然后点出数据的来源. List是列 ...

  3. SpringBoot开发案例之异常处理并邮件通知

    前言 在项目开发中,对于异常处理我们通常有多种处理方式,比如:控制层手动捕获异常,拦截器统一处理异常.今天跟大家分享一种注解的方式,统一拦截异常并处理. 异常处理 在spring 3.2中,新增了@R ...

  4. 优雅关闭服务下线(Jetty)

    在很多时候 kill -9 pid并不是很友好的方法,那样会将我们正在执行请求给断掉,同时eureka 中服务依旧是处于在线状态,这个时候我们可以使用官方提供的actuator来做优雅的关闭处理 - ...

  5. Python3笔记014 - 3.5 跳转语句

    第3章 流程控制语句 3.5 跳转语句 1.break 语句 while 条件表达式1: 语句块1 if 条件表达式2: break for 迭代变量 in 对象: 语句块1 if 条件表达式: br ...

  6. Jmeter系列(37)- 详解 ForEach控制器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 ForEach 控制器一般和用户 ...

  7. linux磁盘容量不足的处理方案

    在虚机上安装memcached时,突然发现磁盘空间不足. df -h 发现,磁盘一共12G,原来是新申请的虚机,磁盘分区没有挂载上. fdisk -l 查看磁盘,发现有 /dev/vdb1 /dev/ ...

  8. window的常用操作

    一.window.location location对象属性 1.location.href 属性返回当前页面的 URL. 2.location.pathname 返回路径和方法名称 3.locati ...

  9. POJ3057 Evacuation 二分图匹配+最短路

    POJ3057 Evacuation 二分图匹配+最短路 题目描述 Fires can be disastrous, especially when a fire breaks out in a ro ...

  10. 洛谷P3295 [SCOI2016]萌萌哒 题解

    洛谷P3295 [SCOI2016]萌萌哒 题目描述 公式粘过来就乱了,还是去洛谷看题吧 分析 如果暴力解决的话就是使用并查集把位数相同的数位并在一起.比如区间[1,2]和区间[3,4]的数字完全相同 ...