当前位置: 首页>NodeJS>Nodejs异步流程控制Async

Nodejs异步流程控制Async

时间:2015-06-28 15:01 来源:网络整理 作者:KKWL 点击:
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个

从零开始nodejs系列文章 ,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!

关于作者

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: 
  • email: bsspirit@gmail.com
  • 转载请注明出处:

    nodejs-async

    前言

    Nodejs框架类库很多,功能相近的框架,本来只打算学一种写一种。之前写过流程控制框架 windjs文章 ,本来是想着要支持一下“国人框架”。无奈啊,作者竟然放弃了维护,国人真的不靠谱啊!

    “流程控制”本来是件比较简单的事,但是由于Nodejs的异步架构的实现方法,对于需要同步的业务逻辑,实现起来就比较麻烦。嵌套3-4层,代码就会变得的支离破碎了!

    今天就遇到了一个业务逻辑,连续对数据库操作,前后有依赖。让我们看看Async是如何解决问题的。

    不用不知道,一用真强大!!

    目录

    1. Async介绍

    Async是一个流程控制工具包,提供了直接而强大的异步功能。基于Javascript为Node.js设计,同时也可以直接在浏览器中使用。

    Async提供了大约20个函数,包括常用的 map, reduce, filter, forEach 等,异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等。

    项目地址: https://github.com/caolan/async

    2. Async安装

    我的系统环境

    我们做实验时,安装async有两个方式:

  • 1. 独立安装async
  • 2. 下载async demo代码安装
  • 我建议大家用第二种方式安装,这样子实例的代码就都有了。

    1). 独立安装async

    ~ D:\workspace\javascript>mkdir nodejs-async && cd nodejs-async ~ D:\workspace\javascript\nodejs-async>npm install async npm http GET https://registry.npmjs.org/async npm http 304 https://registry.npmjs.org/async async@0.2.9 node_modules\async

    打开网页,参照示例学习: https://github.com/bsspirit/async_demo

    2). 下载async demo代码安装

    ~ D:\workspace\javascript>git clone git@github.com:bsspirit/async_demo.git nodejs-async ~ D:\workspace\javascript>cd nodejs-async ~ D:\workspace\javascript\nodejs-async>npm install npm http GET https://registry.npmjs.org/moment npm http GET https://registry.npmjs.org/async npm http 304 https://registry.npmjs.org/moment npm http 304 https://registry.npmjs.org/async async@0.2.9 node_modules\async moment@2.1.0 node_modules\moment

    这套demo示例,比较全面的介绍了async的使用,有中文注释。 感谢github社区原创作者freewind,代码更新的贡献者alsotang。

    当然,我的分支中也修改了一部分代码。在本文最后,我会写到changelog中!

    3. Async函数介绍

    基于async的0.2.9版本。

    async主要实现了三个部分的流程控制功能:

    1). 集合: Collections

    2). 流程控制: Control Flow

    3). 工具类: Utils

    4. async_demo使用介绍

    详细使用请参考github源代码: https://github.com/bsspirit/async_demo

    每个函数的用法,有非常详细的实例!!

    5. 场景:对数据库的连续操作

    这个场景进背景情况,请参考文章: 用Nodejs连接MySQL

    原场景中,对数据串行操作,增删改查(CRUD),代码如下:

    var mysql = require('mysql'); var conn = mysql.createConnection({ host: 'localhost', user: 'nodejs', password: 'nodejs', database: 'nodejs', port: 3306 }); conn.connect(); var insertSQL = 'insert into t_user(name) values("conan"),("fens.me")'; var selectSQL = 'select * from t_user limit 10'; var deleteSQL = 'delete from t_user'; var updateSQL = 'update t_user set name="conan update" where name="conan"'; //delete conn.query(deleteSQL, function (err0, res0) { if (err0) console.log(err0); console.log("DELETE Return ==> "); console.log(res0); //insert conn.query(insertSQL, function (err1, res1) { if (err1) console.log(err1); console.log("INSERT Return ==> "); console.log(res1); //query conn.query(selectSQL, function (err2, rows) { if (err2) console.log(err2); console.log("SELECT ==> "); for (var i in rows) { console.log(rows[i]); } //update conn.query(updateSQL, function (err3, res3) { if (err3) console.log(err3); console.log("UPDATE Return ==> "); console.log(res3); //query conn.query(selectSQL, function (err4, rows2) { if (err4) console.log(err4); console.log("SELECT ==> "); for (var i in rows2) { console.log(rows2[i]); } }); }); }); }); }); //conn.end();
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线----------------------------