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

本文共 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

你可能感兴趣的文章
JavaScript 特殊效果代码
查看>>
【?】codeforces721E Road to Home(DP+单调队列)
查看>>
MySQL 仅保留7天、一个月数据
查看>>
LINUX 11G RAC ASM磁盘组在线增加磁盘扩容
查看>>
OGG 11g Checkpoint 详解
查看>>
PHP中使用socket通信响应速度慢的原因与解决办法
查看>>
Win7下安装Mysql(解压缩版)
查看>>
react-developer-tools
查看>>
几行c#代码,轻松搞定一个女大学生
查看>>
UVA 11992 Fast Matrix Operations (降维)
查看>>
Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
查看>>
暂时不想读研的几点理由
查看>>
增加临时表空间组Oracle11g单实例
查看>>
Diff Two Arrays
查看>>
浅谈java垃圾回收机制
查看>>
shell脚本学习之for循环
查看>>
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
大整数加法
查看>>
下拉菜单
查看>>