原来写的一个分页查询,回调了好几层。

exports.list = function(req,res) {

    var params = {};
var current_page = common_util.get_param_value(req,'current_page','Number',1);
var page_size = common_util.get_param_value(req,'page_size','Number',10);
var start_index = common_util.get_start_index(current_page,page_size); Topic.find(params).skip(start_index).limit(page_size).sort({'reply_time':-1}).exec(function(err,docs){
if(err) {
console.error(err);
}else {
Topic.count(params,function(err,count){
if(err){
console.error(err);
}else{
docs.forEach(function(doc){
doc.interval = date_util.interval(doc.last_reply_time);
}); Category.find({}, function (err, categoryList) {
if (err) {
console.error(err);
} else {
var result = {};
result.current_page = current_page;
result.page_size = page_size;
result.total_count = count;
resutl.total_page = common_util.get_total_page(count,page_size);
result.datas = docs;
result.categoryList = categoryList;
console.dir("hello");
console.dir(result);
res.render('index', result);
}
});
}
});
}
});
}

使用Async后,代码如下:

exports.list = function(req,res) {
var params = {};
var current_page = common_util.get_param_value(req,'current_page','Number',1);
var page_size = common_util.get_param_value(req,'page_size','Number',10);
var start_index = common_util.get_start_index(current_page,page_size);
async.parallel({
datas:function(cb){
Topic.find(params).skip(start_index).limit(page_size).sort({'reply_time':-1}).exec(function(err,docs){
cb(err,docs);
});
},
total_count:function(cb){
Topic.count(params,function(err,count){
cb(err,count);
});
},
categoryList:function(cb){
Category.find({}, function (err, categoryList) {
cb(err,categoryList);
});
}
},function(err,results){
if(err){
console.error(err);
}else{
results.current_page = current_page;
results.page_size = page_size;
results.total_page = common_util.get_total_page(results.total_count,page_size);
res.render('index', results);
}
});
}
async.parallel,并行执行。支持json格式任务,返回的数据也是json格式,json字段的顺序按照任务字段的排序。
{ datas:
[ { _id: 539c156dce6d3ea40f1f1d15,
author: 'yekai',
content: '<p>\n\t<span style="font-family:微软雅黑, Tahoma, Verdana, 宋体;font-size:16px;line-height:26px;background-color:#FFFFFF;">由于网站刚刚建立,并没有提供什么特别的内容,仅仅是将官方主页的内容翻译过来而已,而且也有部分的错误,不过相信以后该网站会成为了解Ubuntu在中国的动态的一个窗 口。</span>\n</p>\n<p>\n\t<span style="font-family:微软雅黑, Tahoma, Verdana, 宋体;font-size:16px;line-height:26px;background-color:#FFFFFF;"><img src="http://static.cnbetacdn.com/newsimg/2014/0613/25_1jCLSOQac.png_w600.png" alt="" /><br />\n</span>\n</p>',
category: 'other',
title: 'Ubuntu 中国官网现已面世',
__v: 1,
last_reply_time: Tue Jun 17 2014 21:54:33 GMT+0800 (中国标准时间),
last_reply_username: 'yekai',
reply_amount: 2,
},
{ _id: 53a04500e5cb4710178753a5,
last_reply_username: 'yekai',
last_reply_time: Tue Jun 17 2014 21:44:52 GMT+0800 (中国标准时间),
author: 'yekai',
content: '赌球输了',
category: 'world_cup',
title: '德国赢了',
__v: 2,
reply_amount: 3,
},
{ _id: 539c16fe9e359e841cc1b097,
author: 'yekai',
content: '<p>\n\t<span style="color:#434343;font-family:微软雅黑, Tahoma, Verdana, 宋体;font-size:16px;line-height:24px;background-color:#FBFBFB;">据国外媒体报道,研究人员最新研究表明,地球最大蓄水层位于美国境内之下的地幔层,大约在地下643.7公里(400英里)处。</span>\n</p>\n<p>\n\t<span style="color:#434343;font-family:微软雅黑, Tahoma, Verdana, 宋体;font-size:16px;line-height:24px;background-color:#FBFBFB;"><img src="http://static.cnbetacdn.com/newsimg/2014/0614/51_1jCUT0h0z.jpg_w600.jpg" alt="" /><br />\n</span>\n</p>',
category: 'other',
title: '美国地下643.7公里发现地球最大“蓄水池”',
__v: 2,
last_reply_time: Tue Jun 17 2014 22:06:43 GMT+0800 (中国标准时间),
last_reply_username: 'afei',
reply_amount: 3,
} ],
total_count: 3,
categoryList:
[ { _id: 5397181a1f7f534418cbbd84,
desc: 'Java类别',
code: 'Java',
name: 'Java',
__v: 0 },
{ _id: 53971d90e209ea6414b2819f,
desc: '',
code: 'Nodejs',
name: 'Nodejs',
__v: 0 },
{ _id: 5399b429a068211816605fbb,
desc: '',
code: 'world_cup',
name: '世界杯',
__v: 0 },
{ _id: 539c1526ce6d3ea40f1f1d14,
desc: '',
code: 'other',
name: '其他',
__v: 0 } ],
current_page: 1,
page_size: 10,
total_page: 1 }
 

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

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

    未使用Async之前coffeescript写的代码: exports.product_file_add = (req,res) -> if !req.param('file_id') retu ...

  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. 配置Windows Server2008+iis+php+mysql所需下载安装包

    最近一个朋友让我帮忙给配置服务器iis+php+mysq 环境,遇到了很多问题,特此就在这里说一下.小弟只是在windwos2003 和windwos XP下配置过iis+php+mysql,去朋友那 ...

  2. Struts2 - Rest(1)

    Struts2提供了一个restful的插件:struts2-rest-plugin-2.3.16.1.jar 这个插件可以把Struts2当做restful来使用,不过它的rest功能目前来说有点“ ...

  3. js 日期时间比较

    js时间日期比较 <script type="text/javascript"> //begin > end 返回True function comptime(b ...

  4. jQuery 工具类库集锦

    备注:待验证. ...................................以下待验证................................ 今天度娘发现这个内容,原来我一直做的都 ...

  5. 错误:javax.servlet.jsp.PageContext can not be to a type

    在写Jsp文件时,引入script源文件(<script type="text/javascript" src="${pageContext.request.con ...

  6. Maven 和 Ant 的区别?

    Maven 和 Ant 有什么不同呢?在回答这个问题以前,首先要强调一点:Maven 和 Ant 针对构建问题的两个不同方面.Ant 为 Java 技术开发项目提供跨平台构建任务.Maven 本身描述 ...

  7. Tomcat服务器搭建

    一.JDK环境搭建 二.tomcat下载安装 三.tomcat服务启动 cmd> net start  tomcat8 四.查看tomcat服务器启动情况: http://localhost:8 ...

  8. PHP多线程

    #### 方案一: PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程.多线程在处理重复性的循环任务,能够大大缩短程序执行时间.我之前的文章中说过,大多数网站的性 ...

  9. XML封装与验证消息

    Document document = DocumentHelper.createDocument(); document.setXMLEncoding(ChARSET_UTF_8); Element ...

  10. Hbase与hive整合

    //hive与hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by 'org.apache.h ...