废话不多说,直接开始

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

第一个方法,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. 3、struct2的常见配置

    1.在eclipse中如何复制一个工程作为一个新的工程 在struct.xml中: <result name="success">/login_sucess.jsp&l ...

  2. 如何运行Spring Boot项目

    背景 帮别人指导一个Spring Boot项目,它在本地把项目push到git服务器上,然后在部署的服务器上把代码pull下来(我猜应该是这个流程) 然后他问我这项目怎么运行? 我当时就懵了,因为我平 ...

  3. 【Model Log】模型评估指标可视化,自动画Loss、Accuracy曲线图工具,无需人工参与!

    1. Model Log 介绍 Model Log 是一款基于 Python3 的轻量级机器学习(Machine Learning).深度学习(Deep Learning)模型训练评估指标可视化工具, ...

  4. swift对象存储安装

    对象存储服务概览 OpenStack对象存储是一个多租户的对象存储系统,它支持大规模扩展,可以以低成本来管理大型的非结构化数据,通过RESTful HTTP 应用程序接口. 它包含下列组件: 代理服务 ...

  5. 不错的UI设计

  6. c语言学习笔记第四章——字符串和格式化输入、输出

    B站有视频演示 本章学习printf函数的输入输出,字符串的定义与实用. 字符串 字符串(character string)是一个或多个字符的序列,如下所示: "Zing went the ...

  7. window的常用操作

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

  8. Redis基础01-redis的数据结构

    参考书:<redis设计与实现> Redis虽然底层是用C语言写的,但是底层的数据结构并不是直接使用C语言的数据结构,而是自己单独封装的数据结构: Redis的底层数据结构由,简单动态字符 ...

  9. beautiful numbers树形dp or 数位dp

    题目找链接 题意: 如果数a能被a中的每一位数整除(0除掉),则称a是一个beautiful number,求一个区间内的beautiful numbers的个数. 分析: 首先,很显然,l到r的所有 ...

  10. 古有七步成诗,今有六步完成DevOps上华为云DevCloud实践

    引言: 在“DevOps能力之屋(Capabilities House of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力.华为云DevClo ...