转向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》笔记之流程控制的更多相关文章

  1. Node.js中Async详解:流程控制

    安装 npm install async --save 地址 https://github.com/caolan/async Async的内容主要分为三部分 流程控制: 简化九种常见的流程的处理 集合 ...

  2. node.js入门学习笔记整理

    (1)node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node与javaScript的区别在于,javaScript的顶层对象是window,而no ...

  3. Node.js入门学习笔记(三)

    基于事件驱动的回调 这个问题不好回答,不过这是Node.js原生的工作方式.它是事件驱动的,这也是它为什么这么快的原因.你可以花一点时间阅读一下Felix Geisendörfer的大作 Unders ...

  4. node.js基本工作原理及流程

    概述 Node.js是什么 Node 是一个服务器端 JavaScript 解释器,用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非 ...

  5. node.js 初学 自我笔记整理 day01

     node.js   概念问题: Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.   npm是一个node的包管理工具  ,也是一个网站  ,还是一条命令.N ...

  6. Node.js API学习笔记(一)

    此文章已经发表于本人博客. Terminal(终端) 说起这个使用过linux系统的兄台一般都会知道的,本人理解:类似Putty这些ssh工具通过 软件来实现远程控制主机,对于我们使用者来说,它会显示 ...

  7. 《深入浅出Node.js》学习笔记(一)

    看了朴灵前辈的node.js系列文章,很开阔视野,虽然能力有限还是有很多不懂,但是还是希望能写下笔记,初步对node.js有点了解. 一.概念 Node.js不是JS应用.而是JS运行平台 Node. ...

  8. Node.JS学习——学习笔记

    Node.JS--学习笔记 2020年02月23日11:52:01 我打算自学NodeJS-通过阅读NodeJS官网来完成. https://nodejs.org/dist/latest-v13.x/ ...

  9. Node.js入门学习笔记(一)

    先来个最常见的"Hello World!". 打开你最喜欢的编辑器(我用的是Sublime Text),创建一个helloWorld.js的文件.我们要做的就是向stdout输出& ...

随机推荐

  1. [Unity3D]Unity3D游戏开发之《愤慨的小鸟》弹弓实现

    各位朋友,大家晚上好, 我是秦元培.欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.今天我们来做一个高端大气上档次的东西. 我相信大家都玩过一款叫做<愤慨的 ...

  2. Usaco 1.3.2 修理牛棚(Barn Repair)

      Barn Repair 题意:在一个夜黑风高,下着暴风雨的夜晚,农民约翰的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 剩下的牛一个紧挨着另一个被排成一行来过夜. 有些牛棚里有 ...

  3. Boost Thread学习笔记五

    多线程编程中还有一个重要的概念:Thread Local Store(TLS,线程局部存储),在boost中,TLS也被称作TSS,Thread Specific Storage.boost::thr ...

  4. javascript json格式解析方法

    json.parse用于从一个字符串中解析出json对象 stringify()用于从一个对象解析出字符串 var dataObj = eval("("+json+")& ...

  5. IT忍者神龟之中的一个句sql语句——连接同一字段的全部值

    Oracle能够用SYS_CONNECT_BY_PATH字符串聚合函数: SELECT LTRIM(MAX(SYS_CONNECT_BY_PATH(productname, ', ')), ', ') ...

  6. Java加入背景音乐

    近期有几个师妹找我给她们的Java期末作业加入背景音乐,非常久不琢磨Java的我花费整晚才搞定,羞愧.在博客中记录下来.警示自己.也帮助一下大家. Java中能够通过AudioClip类来实现音乐播放 ...

  7. rsync Backups for Windows

    Transfer your Windows Backups to an rsync server over SSH rsync.net provides cloud storage for offsi ...

  8. C++ 可以多个函数声明

    c/c++可以有多个函数声明,但实现只能有一个 例子: //file t_defs.h #ifndef _T_DEFS_H_ #define _T_DEFS_H_ void say(void); #e ...

  9. MongoDB -- 更新

    $pull: db.collection.update( <query>, { $pull: { <arrayField>: <query2> } } ) $pul ...

  10. delphi 回调函数

    program Project2; {$APPTYPE CONSOLE} uses SysUtils; type //定义一个对象事件方法 TCallbackFunc = function (i: I ...