废话不多说,直接开始

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

第一个方法,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. 跟着whatwg看一遍事件循环

    前言 对于单线程来说,事件循环可以说是重中之重了,它为任务分配不同的优先级,井然有序的调度.让js解析,用户交互,页面渲染等互不冲突,各司其职. 我们书写的代码无时无刻都在和事件循环打交道,要想写出更 ...

  2. mac Pycharm 导入jieba报错解决

    背景 新买的mac 用的还不是太熟,在用jieba做分词的时候,pycharm import说是没有安装,那我就直接点击安装呗,结果失败,说是当前渠道不能识别,ok,那我就开始一步一步来解决了. 正文 ...

  3. CentOS 6.4 安装 rar软件(tar.gz 包)并注册成功

    1.下载地址: www.rarlab.com/download.htm 2.解压tar.gz文件(cd进入文件目录) # cd /home/wjshan0808/Documents # ls rarl ...

  4. 关键字 package 和 import

    1. package的使用 1.1 使用说明: * 1.为了更好的实现项目中类的管理,提供包的概念 * 2.使用package声明类或接口所属的包,声明在源文件的首行 * 3.包,属于标识符,遵循标识 ...

  5. BZOJ3573 米特运输 题解

    题目 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城市由 ...

  6. day48 work

    1 navicat自己玩一玩 2 练习题一定要搞懂 照着我的思路一遍遍的看敲 3 熟悉pymysql的使用 4 sql注入产生的原因和解决方法 了解 5 思考:如何结合mysql实现用户的注册和登录功 ...

  7. Dubbo 高危漏洞!原来都是反序列化惹得祸

    前言 这周收到外部合作同事推送的一篇文章,[漏洞通告]Apache Dubbo Provider默认反序列化远程代码执行漏洞(CVE-2020-1948)通告. 按照文章披露的漏洞影响范围,可以说是当 ...

  8. day61 django入门(2)

    目录 一.数据的查.改.删 1 查 2 改 3 删 二.django orm中如何创建表关系 三.django请求生命周期流程图 四.路由层 1 无名分组 2 有名分组 3 两种分组不能混用,单个可以 ...

  9. Qt_Demo3:实现棋盘

    1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=53 说明:实现一个8*8的棋盘,点击棋盘的任意位置显示一个表情,并打印出当前的坐标( ...

  10. CTF_show平台 web题解 part3

    web13 题目显示文件上传,各类型上传均提示错误,在使用ctf-scan扫描的时候,发现upload.php.bak. 查看源码: <?php header("content-typ ...