避免多层回调,Node.js异步库Async使用(series)
未使用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)的更多相关文章
- 避免多层回调,Node.js异步库Async使用(parallel)
原来写的一个分页查询,回调了好几层. exports.list = function(req,res) { var params = {}; var current_page = common_uti ...
- Node.js异步处理CPU密集型任务
Node.js异步处理CPU密集型任务 Node.js擅长数据密集型实时(data-intensive real-time)交互的应用场景.然而数据密集型实时应用程序并非仅仅有I/O密集型任务,当碰到 ...
- node.js异步编程的几种模式
Node.js异步编程的几种模式 以读取文件为例: 1.callback function const fs = require('fs'); //callback function fs.readF ...
- Node.js 基础库
全局对象 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global对象的属性. 我们在 Node.js 中能够直接访问到对象通常都是 global ...
- 深入理解node.js异步编程:基础篇
###[本文是基础内容,大神请绕道,才疏学浅,难免纰漏,请各位轻喷] ##1. 概述 目前开源社区最火热的技术当属Node.js莫属了,作为使用Javascript为主要开发语言的服务器端编程技术和平 ...
- node.js异步编程解决方案之Promise用法
node.js异步编程解决方案之Promise var dbBase = require('../db/db_base'); var school_info_db = require('../db/s ...
- node js 异步运行流程控制模块Async介绍
1.Async介绍 sync是一个流程控制工具包.提供了直接而强大的异步功能.基于Javascript为Node.js设计,同一时候也能够直接在浏览器中使用. Async提供了大约20个函数,包含经常 ...
- node.js 异步式I/O 与事件驱动
Node.js 最大的特点就是异步式 I/O(或者非阻塞 I/O)与事件紧密结合的编程模式.这种模式与传统的同步式 I/O 线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一 ...
- Node.js 异步异闻录
本文首发在个人博客:http://muyunyun.cn/posts/7b9fdc87/ 提到 Node.js, 我们脑海就会浮现异步.非阻塞.单线程等关键词,进一步我们还会想到 buffer.模块机 ...
随机推荐
- commonJS规范基本机构
commonJS规范:使用 module.exports 和 require ,基本结构如下: // foo.js 输出模块 module.exports = function(x) { consol ...
- .Net HttpPost的发送和接收示例代码
/// <summary> /// 模拟http 发送post或get请求 /// </summary> /// <param name="Url"& ...
- 解决json包含html标签无法显示的问题
要是在json中包含html标签的话,在js接收数据的时候就会出现问题,导致接收失败. 所以在java端,对json包含有html标签的句子先进行转义. package com.alibaba.int ...
- EventBus学习
Git位置https://github.com/greenrobot/EventBus 使用起来很方便:1. Implement any number of event handling method ...
- rm命令
rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf).所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西 ...
- [转][工地][存]Oracle触发器死锁问题解决
摘自http://blog.itpub.net/12932950/viewspace-607691/ 这两天一直在因为系统初期设计原因导致的一个触发器问题.问题如下:有表T,有客户编号.账户编号及地址 ...
- SQL SERVER 2008安装时出现不能在控件上调用 Invoke 或 BeginInvoke错误 解决方法
或者 SQL SERVER 2008安装时要求重启,但重启后仍要求重启.都可以使用此方法. 注册表的 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet ...
- SPOJ #453. Sums in a Triangle (tutorial)
It is a small fun problem to solve. Since only a max sum is required (no need to print path), we can ...
- 利用MyEclipse自动创建PO类、hbm文件(映射文件)、DAO
原文地址:http://blog.csdn.net/fangzhibin4712/article/details/7179414 前提条件:表sjzdfl 表sjzdxx (使用数据库MySQL) ...
- (WCF) WCF Service Hosting.
3 Options. 1. Host inside of an application. 2. Host into Windows service. 3. Host into IIS 参考: http ...