返回顶部
首页 > 资讯 > 前端开发 > VUE >Node.js中怎么实现串行化流程控制
  • 525
分享到

Node.js中怎么实现串行化流程控制

2024-04-02 19:04:59 525人浏览 八月长安
摘要

本篇文章为大家展示了node.js中怎么实现串行化流程控制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。串行任务:需要一个接着一个坐的任务叫做串行任务。可以使用回调

本篇文章为大家展示了node.js中怎么实现串行化流程控制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

串行任务:需要一个接着一个坐的任务叫做串行任务。

可以使用回调的方式让几个异步任务按顺序执行,但如果任务过多,必须组织一下,否则过多的回调嵌套会把代码搞得很乱。

为了用串行化流程控制让几个异步任务按顺序执行,需要先把这些任务按预期的执行顺序放到一个数组中,这个数组将起到队列的作用:完成一个任务后按顺序从数组中取出下一个。

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

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

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

mkdir random_story
cd random_story
npm install request
npm install htmlparser

request模块是个简化的Http客户端,可以获取RSS数据。htmlparser模块能够把原始的RSS数据转换成javascript数据结构

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

var fs = require('fs');
var request = require('request');
var htmlparser = require('htmlparser');
var configFilename = './rss_feeds.txt';
//确保包含RSS订阅列表的文件存在
function checkForRSSFile() {
  fs.exists(configFilename, function(exists) {
    if (!exists) {
      return next(new Error('Missing RSS file: ' + configFilename));
    }
    next(null, configFilename);
  });
}
//读取并解析包含RSS订阅列表的文件
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]);
  });
}
//向预定源发送HTTP请求以获取数据
function downloadRSSFeed(feedUrl) {
  request({uri: 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);
  });
}
//解析到一个条目数组中
function parseRSSFeed(rss) {
  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();

在试用这个程序之前,现在程序脚本所在的目录下创建一个rss_feeds.txt文件。这里只包含了一条预定源信息:

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

之后执行脚本:

node random_story.js

Node.js中怎么实现串行化流程控制

返回信息如上图。成功实现了一个串行化流程控制。

[async/await形式的串行化流程控制]

之后将源代码改写了一下,改写成ES7的async/await形式。水平有限,如有错误请指出!

let fs = require('fs');
let request = require('request');
let htmlparser = require('htmlparser');
let configFilename = './rss_feeds.txt';

function checkForRSSFile() {
  return new Promise((resolve, reject) => {
    fs.exists(configFilename, (exists) => {
      if (!exists) {
        reject(new Error('Missing RSS file: ' + configFilename));
      }
      resolve();
    });
  });
}

function readRSSFile(configFilename) {
  return new Promise((resolve, reject) => {
    fs.readFile(configFilename, (err, feedList) => {
      if (err) {
        reject(err);
      }
      feedList = feedList.toString().replace(/^\s+|\s+$/g, '').split("\n");
      let random = Math.floor(Math.random()*feedList.length);
      resolve(feedList[random]);
    });
  });
}

function downloadRSSFeed(feedUrl) {
  return new Promise((resolve, reject) => {
    request({uri: feedUrl}, (err, res, body) => {
      if (err) {
        reject(err);
      }
      if (res.statusCode !== 200) {
        reject(new Error('Abnormal response status code'));
      }
      resolve(body);
    });
  });
}

function parseRSSFeed(rss) {
  let handler = new htmlparser.RssHandler();
  let parser = new htmlparser.Parser(handler);
  parser.parseComplete(rss);
  if (!handler.dom.items.length) {
    throw new Error('No RSS items found.');
  }
  let item = handler.dom.items.shift();
  console.log(item.title);
  console.log(item.link);
}

async function getRSSFeed() {
  await checkForRSSFile();
  let url = await readRSSFile(configFilename);
  let rss = await downloadRSSFeed(url);
  return rss;
}
getRSSFeed().then(rss => parseRSSFeed(rss), e => console.log(e));

上述内容就是Node.js中怎么实现串行化流程控制,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网VUE频道。

--结束END--

本文标题: Node.js中怎么实现串行化流程控制

本文链接: https://lsjlt.com/news/74341.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Node.js中怎么实现串行化流程控制
    本篇文章为大家展示了Node.js中怎么实现串行化流程控制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。串行任务:需要一个接着一个坐的任务叫做串行任务。可以使用回调...
    99+
    2024-04-02
  • 详解Node.js串行化流程控制
    串行任务:需要一个接着一个坐的任务叫做串行任务。 可以使用回调的方式让几个异步任务按顺序执行,但如果任务过多,必须组织一下,否则过多的回调嵌套会把代码搞得很乱。 为了用串行化流程控制让几个异步任务按顺序执行...
    99+
    2022-06-04
    详解 流程 串行化
  • Node.js中怎么实现异步流控制
    Node.js中怎么实现异步流控制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.原生JavaScript模式本篇不针对初学...
    99+
    2024-04-02
  • Python中怎么实现程序流程控制条件
    这篇文章将为大家详细讲解有关Python中怎么实现程序流程控制条件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python 程序流程控制条件判断结构flag1 = so...
    99+
    2023-06-17
  • JAVA流程控制这么实现
    本篇内容介绍了“JAVA流程控制这么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!流程控制JAVA输入输出输入两种输入方法:方法一:ja...
    99+
    2023-06-29
  • Shell中如何实现流程控制
    小编给大家分享一下Shell中如何实现流程控制,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Shell 流程控制    在Linux编程中,流程控制语句基本为 if 、for、whi...
    99+
    2023-06-05
  • Golang中的流程控制有哪些及怎么实现
    这篇文章主要讲解了“Golang中的流程控制有哪些及怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的流程控制有哪些及怎么实现”吧!Go语言基础之流程控制主要包括以下内容...
    99+
    2023-07-04
  • Node.js中怎么实现Stream流
    本篇内容主要讲解“Node.js中怎么实现Stream流”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js中怎么实现St...
    99+
    2024-04-02
  • Mariadb复合语句和流程控制怎么实现
    本篇内容主要讲解“Mariadb复合语句和流程控制怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mariadb复合语句和流程控制怎么实现”吧!复合语句在MariaDB 10.1.1+版本...
    99+
    2023-06-27
  • SpringBoot中怎么利用Sentinel实现接口流量控制
    这期内容当中小编将会给大家带来有关SpringBoot中怎么利用Sentinel实现接口流量控制,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。项目搭建首先我们来创建一个测试项目,这里初始化项目的url建议...
    99+
    2023-06-15
  • win10怎么实现远程控制
    在win10中实现远程控制的方法:1.右键“此电脑”选择“属性”;2.点击“远程设置”选项;3.勾选“允许远程协助连接这台计算机”;4.打开远程连接窗口;5.输入计算机名,填写用户名和密码;具体步骤如下:首先,在win10系统桌面中右键点击...
    99+
    2024-04-02
  • Python中的程序流程控制语句怎么用
    这篇文章主要介绍了Python中的程序流程控制语句怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中的程序流程控制语句怎么用文章都会有所收获,下面我们一起来看看吧。一、分支语句在Python中分...
    99+
    2023-06-29
  • Linux中怎么实现流量监控
    这篇文章将为大家详细讲解有关Linux中怎么实现流量监控,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Linux流量监控iftop工具 用处: 用来立即监望网道状况战各ip所应用的频阔 履行...
    99+
    2023-06-16
  • JavaScript流程控制语句怎么用
    这篇文章主要介绍“JavaScript流程控制语句怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript流程控制语句怎么用”文章能帮助大家解决问题...
    99+
    2024-04-02
  • Python流程控制语句怎么用
    这篇文章主要介绍了Python流程控制语句怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python流程控制语句怎么用文章都会有所收获,下面我们一起来看看吧。Python 中有 while&nb...
    99+
    2023-06-30
  • Node.js中怎么实现多线程
    Node.js中怎么实现多线程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Node.js 是如何工作的Node.js 使用两种线程:ev...
    99+
    2024-04-02
  • Node.js 中怎么实现多进程
    Node.js 中怎么实现多进程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Node.js 多进程Node.js本身是以单线程的模式运行的,...
    99+
    2024-04-02
  • node.js中怎么利用流实现读写同步
    node.js中怎么利用流实现读写同步,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。如下所示://10个数 10个字节,每次读4...
    99+
    2024-04-02
  • PHP流程控制语句怎么使用
    在PHP中,流程控制语句用于根据不同的条件来执行不同的代码块。下面是一些常用的流程控制语句的使用方法:1. if语句:用于判断一个条...
    99+
    2023-09-05
    PHP
  • golang流程控制语句怎么使用
    本文小编为大家详细介绍“golang流程控制语句怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang流程控制语句怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。流程控制语句:1、if语句,由...
    99+
    2023-07-04
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作