文档章节

nodejs之async.auto

i5--lou
 i5--lou
发布于 2016/07/11 20:32
字数 597
阅读 545
收藏 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
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
针对 Node.js 后端应用的自动探针 - Skywalking Node.js

Skywalking Node.js探针是由Skywalking社区提供专门针对Node.js生态下的后端应用提供的自动探针 Skywalking Node.js探针遵守Skywalking追踪协议,Node.js探针能够结合SkyWalking的后端分析追...

Xin_Zhang_BJ
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
4
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
4
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
今天
5
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部