手机版

Node.js序列化过程控制的详细说明

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

串行任务:需要一个接一个的任务称为串行任务。

您可以使用回调来使几个异步任务按顺序执行,但是如果任务太多,您必须组织它们,否则太多的回调会使代码变得混乱。

为了通过序列化流控制使多个异步任务按顺序执行,需要将这些任务按照预期的执行顺序放入一个数组中,这个数组将作为一个队列:完成一个任务后,按顺序从数组中取出下一个任务。

数组中的每个任务都是一个函数。任务完成后,应该调用一个处理器函数来告诉它错误状态和结果。

为了演示如何实现序列化过程控制,我们准备制作一个小程序,从随机选择的RSS预定源中获取一篇文章的标题和URL并显示出来。

需要从npm存储下载两个辅助模块,在命令行输入如下命令(以mac系统为例):

mkdir random _ story CD random _ story NPM安装请求NPM安装html解析器请求模块是一个简化的HTTP客户端,可以获取RSS数据。Htmlparser模块可以将原始的RSS数据转换成JavaScript数据结构。

在新目录中创建一个random_story.js文件,其中包含以下代码:

var fs=require(' fs ');var request=require(' request ');var html parser=require(' html parser ');var configFilename='。/RSS _ feeds . txt ';//确保包含RSS订阅列表的文件具有函数checkforrsfile(){ fs . exists(config filename,function (exists) {if(!存在){返回下一个(新错误('缺少RSS文件: '配置文件名));} next(null,config filename);});}//读取并解析文件函数readrs file(config filename){ fs . read file(config filename,function (err,feed list){ if(err){ return next(err)};} feedList=feedList.toString()。replace(/^\s |\s $/g ' ')。拆分(' \ n ');var random=math . floor(math . random()* feed list . length);下一个(null,FeedList[随机]);});}//向预定源发送HTTP请求获取数据。函数下载RSS提要(feed durl){ request({ uri : feed durl }),函数(err,RES,body){ if(err){ return next(err);} if (res.statusCode!==200) {返回下一个(新错误('异常响应状态代码'));} next(null,body);});}//将其解析为条目数组。函数解析器提要(RSS) {var handler=新的HTML解析器。RSS处理程序();var parser=新的htmlparser。解析器(处理程序);parser . parse complete(RSS);if(!handler.dom.items.length) {返回下一个(新错误('未找到RSS项')));} var item=handler . DOM . items . shift();console . log(item . title);console . log(item . link);}var tasks=[ checkForRSSFile,readRSSFile,downloadRSSFeed,parsersfeed];函数next(err,result){ if(err){ throw err;} var CurrentTask=tasks . shift();if (currentTask) { currentTask(结果);} }//开始执行序列化任务next();在尝试这个程序之前,在程序脚本所在的目录中创建一个rss_feeds.txt文件。只有一条预先确定的源信息:

http://dave.smallpict.com/rss.xml

然后执行脚本:

节点random _ story . js

返回如上所示的信息。序列化过程控制已成功实现。

[异步/等待序列化流控制]

之后,源代码被重写为ES7的异步/等待形式。水平有限,如有错误请指出!

让fs=require(' fs ');let request=require(' request ');让html解析器=require(' html解析器');让配置文件名=' ./RSS _ feeds。txt ';函数checkforsfile(){ 0返回新的承诺(解析,拒绝)={ fs.exists(configFilename),(exists)={ if(!存在){拒绝(新错误('缺少简易资讯聚合文件: '配置文件名));} resolve();});});}函数readrsfile(config filename){ 0返回新的承诺(解析,拒绝)={ fs.readFile(configFilename),(err,提要列表)={ if(err){ reject(err)};} feedList=feedList.toString().replace(/^\s |\s $/g ' ').拆分(' \ n ');让随机=数学。地板(数学。random()*提要列表。长度);解析(FeedList[随机]);});});}函数下载提要(提要网址){ 0返回新的承诺(解析,拒绝)={请求({uri: feedUrl},(err,res,body)={ if(err){ reject(err)};} if (res.statusCode!==200) {拒绝(新错误('异常响应状态码');}解决(正文);});});}函数解析器sFeed(RSS){ let handler=新的html解析器.rsshhandler();let解析器=新的html解析器.解析器(处理程序);解析器。解析完成(RSS);if(!handler . DOM . items . length){ 0抛出新错误('未找到简易资讯聚合项');} let item=handler。多姆。物品。shift();控制台。日志(项目。标题);控制台。日志(项目。链接);}异步函数getRSSFeed(){ await checkforsfile();让URL=wait readrsfile(配置文件名);让RSS=等待下载量(URL);返回rss}getRSSFeed().然后(RSS=parser feed(RSS),e=控制台。log(e));以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:Node.js序列化过程控制的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。