文档章节

nodejs之async.auto

i5--lou
 i5--lou
发布于 2016/07/11 20:32
字数 597
阅读 579
收藏 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
粉丝 20
博文 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) {
      
    });
在nodeJS 中 使用async模块, 调用 async.auto方法提示 callback不是一个函数

代码如下:官方 API代码 async.auto({ getData: function (callback) { setTimeout(function(){ console.log('1.1: got data'); callback(); }, 300); }, makeFolder: function (callback) {......

朱大常
2016/08/09
298
0
Node.js v0.12.8 发布

Node.js v0.12.8 发布,更新如下: Commits [] - build: backport tools/release.sh (Rod Vagg) #3642 [] - build: backport config for new CI infrastructure (Rod Vagg) #3642 [] - build......

oschina
2015/11/26
3.1K
20
Node.js进阶教程第一步(基础篇)-何韬-专题视频课程

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

pkutao
2016/09/06
0
0
Node.js的学习资源、教程和工具

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

90后爱国
2015/07/21
0
0
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
2018/05/21
912
3

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
1
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部