博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Node.js In Action》笔记之流程控制
阅读量:4358 次
发布时间:2019-06-07

本文共 2795 字,大约阅读时间需要 9 分钟。

转向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]();    }});

转载于:https://www.cnblogs.com/GongQi/p/5043229.html

你可能感兴趣的文章
Python(xlrd、xlwt模块)操作Excel实例(一)
查看>>
ZOJ Monthly, November 2012 - G - Gao The Sequence
查看>>
react dnd demo2
查看>>
洛谷——P1896 [SCOI2005]互不侵犯
查看>>
Java之String
查看>>
20155212 2017-2018-1 《信息安全系统设计》第7周学习总结
查看>>
新手C#ListView使用记录2018.08.03
查看>>
1028: 可乐(2018年中南大学研究生复试机试题 )
查看>>
珍藏的最全的windows操作系统快捷键
查看>>
【DBAplus】SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势
查看>>
二叉树结点删除操作
查看>>
图论-单源最短路-SPFA算法
查看>>
转换文件的字符集
查看>>
prometheus + grafana安装部署(centos6.8)
查看>>
Redis和Memcached的区别【转】
查看>>
VMware: Deploy multiple VM’s from template with PowerCLI
查看>>
Cascaded pose regression
查看>>
model,map,MapAndVivew用于页面跳转时候使用的即跳转后才添加属性 这样再回调中无法使用 因为回调的前提是页面不调转;解决的方法是用responsewrite(普通的字符响应)...
查看>>
自动在数据库中创建表
查看>>
如何在一个进程中启动另外一个线程:ProcessStartInfo Constructor
查看>>