《Node.js In Action》笔记之流程控制
转向Javascript后,开始学习了node.js,选择的第一本书是《Node.js in Action》
将近一个月时间,断断续续看完,选几个点做下笔记
1.实现串行化流程控制

var fs=require('fs');
var request = request('request');
var htmlparser=require('htmlparser');
var configFilename='./rss_feeds.txt';
//task1,确保包含rss预定源URL列表的文件存在
function checkForRssFile(){
fs.exists(configFilename,function(exists){
if(!exists)
return next(new Error('Missing Rss file:'+configFilename));
next(null,configFilename);
})
}
//task2,读取并解析包含预定源url的文件
function readRssFile(configFilename){
fs.readFile(configFilename, function (err,feedList) {
if(err) return next(err);
feedList = feedList
.toString()
.replace(/^\s+|\s+$/g,'')
.split('\n');
var random= Math.floor((Math.random()*feedList.length));
next(null,feedList[random]);
})
}
//task3,向选定的预定源发送http请求以获取数据
function downloadRssFeed(feedUrl){
request({url:feedUrl},function(err,res,body){
if(err) return next(err);
if(res.statusCode !=200)
return next(new Error('Abnormal response status code'))
next(null,body);
});
}
//task4 将预定源数据解析到一个条目数据中
function parseRssFeed(res){
var handler=new htmlparser.RssHandler();
var parser = new htmlparser.Parser(handler);
parser.parseComplete(rss);
if(!handler.dom.items.length)
return next(new Error('No rss items found'));
var item = handler.dom.items.shift();
console.log(item.title);
console.log(item.link);
}
//把所有任务按执行顺序添加到一个数组中
var tasks=[checkForRssFile,readRssFile,downloadRssFeed,parseRssFeed];
function next(err,result){
if(err) throw err;
var currentTask=tasks.shift();
if(currentTask){
currentTask(result);
}
}
//开始任务的串行化执行
next();
2.实现并行化流程控制

//并行读取文件并统计单词
var fs=require('fs');
var completedTasks=0;
var tasks=[];
var wordCounts={};
var filesDir = './text'; function checkIfComplete(){
completedTasks ++;
if(completedTasks == tasks.length){
for(var index in wordCounts){
console.log(index + ":" +wordCounts[index]);
}
}
} function countWordsInText(text){
var words=text.toString().toLowerCase().split(/\W+/).sort();
for(var index in words){
if(word){
wordCounts[word]=(wordCounts[word])?wordCounts[word]+1:1;
}
}
} fs.readdir(filesDir,function(err,files){
if(err) throw err;
for(var index in files){
var task = (function(file){
return function(){
fs.readFile(file,function(err,text){
if(err) throw err;
countWordsInText(text);
checkIfComplete();
})
}
})(filesDir+'/'+files[index]);
tasks.push(task);
}
for(var task in tasks){
tasks[task]();
}
});
《Node.js In Action》笔记之流程控制的更多相关文章
- Node.js中Async详解:流程控制
安装 npm install async --save 地址 https://github.com/caolan/async Async的内容主要分为三部分 流程控制: 简化九种常见的流程的处理 集合 ...
- node.js入门学习笔记整理
(1)node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node与javaScript的区别在于,javaScript的顶层对象是window,而no ...
- Node.js入门学习笔记(三)
基于事件驱动的回调 这个问题不好回答,不过这是Node.js原生的工作方式.它是事件驱动的,这也是它为什么这么快的原因.你可以花一点时间阅读一下Felix Geisendörfer的大作 Unders ...
- node.js基本工作原理及流程
概述 Node.js是什么 Node 是一个服务器端 JavaScript 解释器,用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非 ...
- node.js 初学 自我笔记整理 day01
node.js 概念问题: Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. npm是一个node的包管理工具 ,也是一个网站 ,还是一条命令.N ...
- Node.js API学习笔记(一)
此文章已经发表于本人博客. Terminal(终端) 说起这个使用过linux系统的兄台一般都会知道的,本人理解:类似Putty这些ssh工具通过 软件来实现远程控制主机,对于我们使用者来说,它会显示 ...
- 《深入浅出Node.js》学习笔记(一)
看了朴灵前辈的node.js系列文章,很开阔视野,虽然能力有限还是有很多不懂,但是还是希望能写下笔记,初步对node.js有点了解. 一.概念 Node.js不是JS应用.而是JS运行平台 Node. ...
- Node.JS学习——学习笔记
Node.JS--学习笔记 2020年02月23日11:52:01 我打算自学NodeJS-通过阅读NodeJS官网来完成. https://nodejs.org/dist/latest-v13.x/ ...
- Node.js入门学习笔记(一)
先来个最常见的"Hello World!". 打开你最喜欢的编辑器(我用的是Sublime Text),创建一个helloWorld.js的文件.我们要做的就是向stdout输出& ...
随机推荐
- POJ3436 ACM Computer Factory 【最大流】
ACM Computer Factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5412 Accepted: 1 ...
- accumulate
accumulate?就是sum up a range of elements.呵呵.这个挺简单的.以下是这个算法的简单介绍: Syntax: #include <numeric>//呵呵 ...
- .net程序员面试不完全指南
程序员找工作难,想要被成功聘用更难.最常见的办法是经历一次又一次的面试失败后自己琢磨出面试技巧,当然也可以花钱到一些培训机构去接受专业的书面简历和模拟面试的指导.这些方法可能都会奏效,但是却并不是时间 ...
- webdynpro的select_option示例
需求,输入航线代码和航线编号区间,查询记录存在表中显示,并不是alv显示 1.使用组件WDR_SELECT_OPTIONS. 2.在组件控制器中加入以下组件 3.在视图属性中也添加该组件 4.创建节点 ...
- cms配置使用
在早期完成了页面的切图之后,需要配置cms来实现小编上传数据更新页面的流程,在取得SEO的官网URL规则之后,就能开始官网在cms的基本配置了. 下面介绍cms的特点: 类别,决定内容与内容对应的路径 ...
- 实现StatusBar的Flat风格
效果见右图,OfficeXP里就是这样的风格,其实实现很简单,不必专门在网上找别人控件. 把StatusBar的SimplePanel设为False,点击Panels添加StatusPanel,把所有 ...
- 爬虫总结_java
基于webmagic的爬虫项目经验小结 大概在1个月前,利用webmagic做了一个爬虫项目,下面是该项目的一些个人心得,贴在这里备份: 一.为什么选择webmagic? 说实话,开源的爬虫框架已经很 ...
- 关于vs2005 __RPC__out __RPC__in 没有定义编译错误
1. 下载WDK http://www.microsoft.com/en-us/download/details.aspx?id=11800 2. 安装WDK 3. vs2005 设置:工具--> ...
- 【分享】深入浅出WPF全系列教程及源码
本人10月份提出离职,可是交接非常慢,预计年底才会交接完,趁着交接之际,自学了一下WPF,由于这是微软未来的发展趋势,自WIN7以来包含前不久公布的WIN8,核心还是WPF,在此,将自己的学习成果做一 ...
- MFC 单文档中动态添加菜单项和响应菜单事件
新建一个单文档程序 在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏 #define ID_N ...