未使用Async之前coffeescript写的代码:

exports.product_file_add = (req,res) ->
if !req.param('file_id')
return res.json({'flag':'error','msg':'请先上传文件再保存!'})
file_type = req.param('file_type')
#判断产品和文件类型,限制上传的数量
params = {}
params.product_code = req.param('product_code')
params.file_type = file_type
ProductFile.count params,(err,count) ->
if count>0
return res.json({'flag':'error','msg':'该产品的文件已存在!'})
product_file = new ProductFile
product_file.add req,(err)->
if err
resErr(res,err)
else
res.json({'flag':'success'})

使用Async之后coffeescript写的代码:

exports.product_file_add = (req,res) ->
if !req.param('file_id')
return res.json({'flag':'error','msg':'请先上传文件再保存!'})
async.series([
(cb)->
#判断产品和文件类型,限制上传的数量
params = {}
params.product_code = req.param('product_code')
params.file_type = file_type
ProductFile.count params,(err,count) ->
if count>0
cb('该产品的文件已存在!')
else
cb(null)
(cb)->
product_file = new ProductFile
product_file.add req,(err)->
if err
cb(err)
else
cb(null)
],
(err,results)->
if err
return res.json({'flag':'error','msg':err})
res.json({'flag':'success'})
)

  当然这里的代码嵌套不深,不太能看不进出使用Async的好处。

  Async.series,串行执行每一个异步回调的函数

  

  依次执行一个函数数组中的每个函数,每一个函数执行完成之后才能执行下一个函数。
  如果任何一个函数向它的回调函数中传了一个error,则后面的函数都不会被执行,并且将会立刻会将该error以及已经执行了的函数的结果,传给series中最后那个callback。
  当所有的函数执行完后(没有出错),则会把每个函数传给其回调函数的结果合并为一个数组,传给series最后的那个callback。
  还可以json的形式来提供tasks。每一个属性都会被当作函数来执行,并且结果也会以json形式传给series最后的那个callback。这种方式可读性更高一些。这段话来源于(http://www.verydemo.com/demo_c441_i206465.html)

避免多层回调,Node.js异步库Async使用(series)的更多相关文章

  1. 避免多层回调,Node.js异步库Async使用(parallel)

    原来写的一个分页查询,回调了好几层. exports.list = function(req,res) { var params = {}; var current_page = common_uti ...

  2. Node.js异步处理CPU密集型任务

    Node.js异步处理CPU密集型任务 Node.js擅长数据密集型实时(data-intensive real-time)交互的应用场景.然而数据密集型实时应用程序并非仅仅有I/O密集型任务,当碰到 ...

  3. node.js异步编程的几种模式

    Node.js异步编程的几种模式 以读取文件为例: 1.callback function const fs = require('fs'); //callback function fs.readF ...

  4. Node.js 基础库

    全局对象 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global对象的属性. 我们在 Node.js 中能够直接访问到对象通常都是 global ...

  5. 深入理解node.js异步编程:基础篇

    ###[本文是基础内容,大神请绕道,才疏学浅,难免纰漏,请各位轻喷] ##1. 概述 目前开源社区最火热的技术当属Node.js莫属了,作为使用Javascript为主要开发语言的服务器端编程技术和平 ...

  6. node.js异步编程解决方案之Promise用法

    node.js异步编程解决方案之Promise var dbBase = require('../db/db_base'); var school_info_db = require('../db/s ...

  7. node js 异步运行流程控制模块Async介绍

    1.Async介绍 sync是一个流程控制工具包.提供了直接而强大的异步功能.基于Javascript为Node.js设计,同一时候也能够直接在浏览器中使用. Async提供了大约20个函数,包含经常 ...

  8. node.js 异步式I/O 与事件驱动

    Node.js 最大的特点就是异步式 I/O(或者非阻塞 I/O)与事件紧密结合的编程模式.这种模式与传统的同步式 I/O 线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一 ...

  9. Node.js 异步异闻录

    本文首发在个人博客:http://muyunyun.cn/posts/7b9fdc87/ 提到 Node.js, 我们脑海就会浮现异步.非阻塞.单线程等关键词,进一步我们还会想到 buffer.模块机 ...

随机推荐

  1. 反向代理代理百度、google

    <VirtualHost _default_:443> # ServerAdmin mail@localhost # DocumentRoot "/var/www/html&qu ...

  2. Tengine:基于Nginx的衍生版

    engine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验 ...

  3. Presto 来自Facebook的开源分布式查询引擎

    Presto是一个分布式SQL查询引擎, 它被设计为用来专门进行高速.实时的数据分析.它支持标准的ANSI SQL,包括复杂查询.聚合(aggregation).连接(join)和窗口函数(windo ...

  4. javascript 容错

    window.onerror=function(){ return true;} 系统有onerror报错的代码,只要重新一下就可以在javascript错误的时候返回真(true)

  5. 多线程编程之Windows同步方式

    在Windows环境下针对多线程同步与互斥操作的支持,主要包括四种方式:临界区(CriticalSection).互斥对象(Mutex).信号量(Semaphore).事件对象(Event).下面分别 ...

  6. [Hibernate] - Annotations - One To Many

    Hibernate使用Annotation的一对多: hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8&q ...

  7. php 连接测试sphinx

    shpinx.php <?php header("Content-type:text/html;charset=utf-8"); include 'SphinxClient. ...

  8. java 输入输出项目

    package hellohe; import java.util.Scanner; /** * * @author Administrator *1.导入java.util.scanner; *2. ...

  9. 利用Boost影响Lucene查询结果的排序

    转自:http://catastiger.iteye.com/blog/803796 前提:不对结果做sort操作.    在搜索中,并不是所有的Document和Fields都是平等的.有些技术会要 ...

  10. php获取一年中某一周的开始和结束时间

    PHP来获取一年中的每星期的开始日期和结束日期的代码 函数get_week()通过传入参数$year年份,获取当年第一天和最后一天所在的周数,计算第一周的日期,通过循环获取每一周的第一天和最后一天的日 ...