Node.js学习笔记 02 Implementing flow control
What is flow control?
和其它语言一样,Node.js 在代码编写时,如何组织代码,如何写出clean code都是不可避免的难点。
同时,由于Node.js的天然特性(异步,事件驱动),良好的代码组织就更为重要。
所谓的flow control指的是序列化的执行一个个node.js task的代码组织手段。
与其它语言一样,任务流可以被组织成两种(串行,并行)如下图:

How to flow control?
一种方式是使用node.js 社区提供的各类第三方模块(),另一种方式就是我们自己编写相关代码。为了工程开发的效率,用第三方库当然是更好的选择,但是为了更好的了解node.js的异步原理,我们可是自己试着实现两种流控制。
A simple demo of serial flow control
以下的代码实现了每隔一秒输出不同文字的功能。
setTimeout(function () {
console.log("First");
setTimeout(function () {
console.log("Sencond");
setTimeout(function () {
console.log("Third");
}, 1000);
}, 1000);
}, 1000);
如果用第三方库来实现串行流控制,代码会是这样的:
var flow = require('nimble');
flow.series([
function (callback) {
setTimeout(function () {
console.log("First");
callback();
}, 1000)
},
function (callback) {
setTimeout(function () {
console.log("Second");
callback();
}, 1000)
},
function (callback) {
setTimeout(function () {
console.log("Third");
callback();
}, 1000)
}
]);
More code but more maintainable。特别是在串行调用链极长的时候,使用流控制的优势就非常明显了。
那我们自己要如何实现相关代码呢?下面就是例子:
var tasks = [
function (callback) {
setTimeout(function () {
console.log("First");
next();
}, 1000)
},
function (callback) {
setTimeout(function () {
console.log("Second");
next();
}, 1000)
},
function (callback) {
setTimeout(function () {
console.log("Third");
next();
}, 1000)
}
];function next(){
var currentTask = tasks.shift();
if (currentTask) {
currentTask();
}
}next();
OK,很简单吧,我们再来看并行。
Parallel flow control
以下代码假设我们跑了10个并行任务:
var taskCounter = 0;
var taskSum = 10;function isTaskCompleted(){
if (++taskCounter == taskSum) {
console.log('All job done');
}
}function Job(){
//Lots of code here
isTaskCompleted();
}for(var i = 0; i < 10; i++)
Job();
使用nimble来解决同样的问题:
var flow = require('nimble');
flow.parallel([
Job(),
Job(),
Job(),
Job(),
Job(),
Job(),
Job()
]);
Summary
本文是对flow control做的很精简的总结,信息量不大,大家多多包涵。
Node.js学习笔记 02 Implementing flow control的更多相关文章
- 一点感悟:《Node.js学习笔记》star数突破1000+
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
- Node.js学习笔记(3):NPM简明教程
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
- 系列文章--Node.js学习笔记系列
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
- Node.js学习笔记(2):基本模块
Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...
- Node.js学习笔记(1):Node.js快速开始
Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...
- Node.js学习笔记(4):Yarn简明教程
Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...
- Node.js学习笔记(一)
1.回调函数 node是一个异步事件驱动的平台,所以在代码中我们经常需要使用回调函数. 例: setTimeout(function(){ console.log('callback is calle ...
- Node.js学习笔记(一):快速开始
最近接了一个node项目,虽然最后顺利完成了,但是由于第一次实战,整个过程是赶出来的,许多地方一知半解.现在项目结束了,就静下心来系统地学一学,理一理,读书不忘拿笔,既然读书了,当然就要记点东西.一方 ...
- Node.js学习笔记(一)基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
随机推荐
- 009 The Interfaces In JAVA(官网文档翻译)
Interfaces There are a number of situations in software engineering when it is important for dispara ...
- Ubuntu 16.04 LTS U盘安装要点
一.UltraISO UltraISO是一款功能强大而又方便实用的光盘映像文件制作/编辑/转换工具,它可以直接编辑ISO文件和从ISO中提取文件和目录,也可以从CD-ROM制作光盘映像或者将硬盘上的文 ...
- Android开发-API指南-<instrumentation >
<instrumentation> 英文原文:http://developer.android.com/guide/topics/manifest/instrumentation-elem ...
- OpenStack-Mitaka 一键安装测试环境脚本
说明:这个脚本是采用Bash Shell编写,这个版本还只能作为测试环境搭建使用. 此脚本原形的发起人是网友:WuYuLiang.这里有他的博客链接: 第一版的链接: http://blog.cs ...
- BZOJ1002 轮状病毒
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
- startUML常用的组合片段
1. 常用的组合片段 片段类型 名称 说明 Opt 选项 包含一个可能发生或可能不发生的序列. 可以在临界中指定序列发生的条件. Alt 抉择 包含一个片段列表,这些片段包含备选消息序列. 在任何场 ...
- linux下的mysql乱码问题
1,承接上一随笔,因为我用的是rmp的两种反式. rpm -ivh MySQL-server-4.0.14-0.i386.rpm rpm -ivh MySQL-client-4.0.14-0.i386 ...
- C#之泛型
泛型是C# 2.0版本才有的语言特性,是具有参数类型占位符的类.结构.接口和方法.这些占位符是类.结构.接口和方法所存储或使用的一个或多个占位符.简单来说,就是变量类型的参数化. 以下是详细demo: ...
- b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释
我最近一直在找适合将来用于公司大型bs,b2b b2c的基础架构. 实际情况是要建立一个bs架构b2b.b2c的网站,当然还包括wap站点.手机app站点. 一.现有公司技术人员现状: 1.熟悉asp ...
- markdown语法学习效果预览
注: 结合markdown官方文档 其中大部分例子和说明文字都摘自官方文档 官方链接:Markdown: Basics (快速入门). 一 段落.标题.区块代码 Markdown 支持两种标题的语法, ...