文档章节

nodejs之async.auto

i5--lou
 i5--lou
发布于 2016/07/11 20:32
字数 597
阅读 565
收藏 1

nodejs最具有魅力的地方就是它的异步处理机制,不得不承认正是因为有了它,才能做到无限量的并发,但是异步无阻塞的操作也使得我们要做一些需要顺序执行的业务逻辑时,会显得十分棘手,

直到我了解到了async库,才知道我以前写的代码是有多么的怂,而async最强大之处就在于async.auto这个方法,那么我们就简单介绍一下这个方法,

先来看代码

async.auto({
  func1:function(cb,res){
    console.log("first");
    cb(null);
  },
  func2:function(cb,res){
    console.log("second");
    cb(null);
  },
  func3:function(cb,res){
    console.log("third");
    cb(null);
  },
  func4:function(cb,res){
    console.log("forth");
    cb(null);
  }
},function(err,res){
});

在上面的代码中,async.auto中的4个方法是异步的,所以输出的顺序并不是从上往下的,所以这里我就不说输出顺序了,因为我也不知道它是会如何输出......

那么如果我一定要顺序输出,要怎么做呢?

看下面代码

async.auto({
  func1:function(cb,res){
    console.log("first");
    cb(null);
  },
  func2:['func1',function(cb,res){
    console.log("second");
    cb(null);
  }],
  func3:['func2',function(cb,res){
    console.log("third");
    cb(null);
  }],
  func4:['func3',function(cb,res){
    console.log("forth");
    cb(null);
  }]
},function(err,res){
});

这样的话,4个方法之间就会产生依赖,它们就会按照顺序往下执行,

好,那么问题就来了,现在我的业务逻辑是func1与func2可以同步执行,func3必须要依赖func1,func4必须依赖func2与func3,想想是不是有点复杂了呢?

当然你可以先自己试试怎么写,然后再看看接下来我写的代码,看看我写的方法有木有区别

async.auto({
  func1:function(cb,res){
    console.log("first");
    cb(null);
  },
  func2:function(cb,res){
    console.log("second");
    cb(null);
  },
  func3:['func1',function(cb,res){
    console.log("third");
    cb(null);
  }],
  func4:['func2','func3',function(cb,res){
    console.log("forth");
    cb(null);
  }]
},function(err,res){
});

想必这个异步操作顺序应该很好理解吧

相比于其他的类库来说,async.auto更好理解一点

另外async.auto还有一个特点,就是每一个cb都会传入一个res参数,让你得到上一个函数的执行结果,当然,如果上一个函数不存在或是在你执行之后,那就不会有结果了,你不需要手动地将结果存入对象,async.auto就会帮你做好这件事情,是不是很神奇啊,哈哈

© 著作权归作者所有

共有 人打赏支持
i5--lou
粉丝 19
博文 72
码字总数 33811
作品 0
杭州
程序员
私信 提问
加载中

评论(2)

i5--lou
i5--lou
可以把上一个函数的结果集放到callback中,供给下一个函数使用
或者简单一点,生成一个全局对象,这样下一个函数就能用到了
JunKang
JunKang
如果我需要通过一个文章id找到发布人,那么
async.auto({
      theme: function(callback, data) {
        Theme.findOne({_id: req.params._id}, function(err, docs) {
          if(err) {
            res.render('error/cue', {message: err});
          }
          callback(null, docs);
        })
      },
      user: ['theme', function(callback, data) {
        这里怎么通过上面依赖的theme结果来获取发布人的信息呢
      }],
    }, function(err, results) {
      
    });
Skywalking Node.js 探针 0.1.0 版本正式发布

项目介绍: Skywalking Node.js探针0.1.0版本正式发布了. Skywalking Node.js探针是由Skywalking社区提供专门针对Node.js生态下的后端应用提供的自动探针。 Skywalking Node.js探针遵守Skywa...

Xin_Zhang_BJ
05/21
0
1
Node.js进阶教程第一步(基础篇)-何韬-专题视频课程

Node.js进阶教程第一步(基础篇)—18659人已学习 课程介绍 本课程从Node.js的安装配置开始,包括函数调用,模块调用,路由,文件操作,异常处理,参数接收,正则表达式,连接数据库,事件等内...

pkutao
2016/09/06
0
0
Nodejs + Express 实现多用户博客系统(23 个视频)

Nodejs 实现最常见的登录注册功能,结合管理文章等功能,实现大家所期待的多用户博客系统。 总播放时长:135 分钟 作者:hfpp2012 类别:后端 技术分类:Nodejs Node.js + Express 实现多用户...

rails365
08/15
0
0
Node.js的学习资源、教程和工具

这篇文章编译整理自Stack Overflow的一个如何开始学习Node.js的Wiki帖,这份资源列表在SO上面浏览接近60万次,数千个收藏和顶。特意整理发布到这里,其中添加了部分中文参考资料。 学习指南和...

90后爱国
2015/07/21
0
0
node可以查看没有问题,npm所有命令报错甚至包括npm-v

报错信息: C:Users123>npm -v Error: EPERM: operation not permitted, mkdir 'C:Program Filesnodejsnode_global' TypeError: Cannot read property 'get' of undefined at errorHandler (......

吴昊昊0418
07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型。 ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEnt...

TonyStarkSir
今天
3
0
大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
2
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
6
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
9
0
GPON网络故障处理手册

导读 为了方便广大网络工作者工作需要,特搜集以下GPON网络处理流程供大家学习参考。开始—初步定为故障—检查光纤状况—检查ONU状态--检查设备运行状态—检查设备数据配置—检查上层设备状态...

问题终结者
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部