亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解Node.js串行化流程控制

2019-11-19 16:40:15
字體:
來源:轉載
供稿:網友

串行任務:需要一個接著一個坐的任務叫做串行任務。

可以使用回調的方式讓幾個異步任務按順序執行,但如果任務過多,必須組織一下,否則過多的回調嵌套會把代碼搞得很亂。

為了用串行化流程控制讓幾個異步任務按順序執行,需要先把這些任務按預期的執行順序放到一個數組中,這個數組將起到隊列的作用:完成一個任務后按順序從數組中取出下一個。

數組中的每個任務都是一個函數。任務完成后應該調用一個處理器函數,告訴它錯誤狀態和結果。

為了演示如何實現串行化流程控制,我們準備做個小程序,讓它從一個隨機選擇的RSS預定源中獲取一篇文章的標題和URL,并顯示出來。

需要從npm存儲苦衷下載兩個輔助模塊,在命令行中(以mac系統為例)輸入以下命令:

mkdir random_storycd random_storynpm install requestnpm 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

返回信息如上圖。成功實現了一個串行化流程控制。

[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));

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品videossex性护士| 在线观看国产精品淫| 国产一区二区三区在线视频| 国产成人精品一区二区在线| 国产精品av在线播放| 国产大片精品免费永久看nba| 992tv成人免费影院| 91久久精品国产| 欧美日韩免费一区| 91在线免费观看网站| 91欧美精品午夜性色福利在线| 亚洲黄页网在线观看| 欧美激情精品久久久久久久变态| 欧美性视频网站| 国产精品v片在线观看不卡| 欧美一级黑人aaaaaaa做受| 亚洲3p在线观看| 色一情一乱一区二区| 一区二区三区视频免费在线观看| 国产亚洲成精品久久| 国产欧美日韩91| 欧美激情视频网址| 国产成人拍精品视频午夜网站| 亚洲国产精品人人爽夜夜爽| 欧美国产日韩一区二区在线观看| 国语自产在线不卡| 一区二区在线视频播放| 精品小视频在线| 国产精品黄色av| 国产99久久精品一区二区| 精品亚洲一区二区三区| 九九热这里只有精品6| 日韩电影大全免费观看2023年上| 日韩大片免费观看视频播放| 久久久久久美女| 日韩精品免费在线观看| 亚洲欧洲免费视频| 亚州欧美日韩中文视频| 日本亚洲欧洲色α| 91在线无精精品一区二区| 97精品伊人久久久大香线蕉| 国产精品7m视频| 亚洲午夜未满十八勿入免费观看全集| 91系列在线播放| 成人两性免费视频| 最近2019年中文视频免费在线观看| 国产一级揄自揄精品视频| 国产精品九九九| 精品国产乱码久久久久久天美| 亚洲国产精品免费| 久久亚洲精品小早川怜子66| 久久精品成人欧美大片| 国产精品成人一区二区三区吃奶| 一区二区三区视频免费| 国产精选久久久久久| 久久男人av资源网站| 亚洲人成77777在线观看网| 在线播放亚洲激情| 伊人久久男人天堂| 欧美激情成人在线视频| 亚洲欧美激情另类校园| 欧美极品欧美精品欧美视频| 久久久av网站| 欧美最猛性xxxxx免费| 中文字幕v亚洲ⅴv天堂| 国产精品草莓在线免费观看| 51精品国产黑色丝袜高跟鞋| 国产成人精品久久二区二区91| 一区二区三区视频免费| 中文字幕亚洲欧美日韩高清| 欧美激情一区二区三区在线视频观看| 国产亚洲人成网站在线观看| 久久久人成影片一区二区三区| 国产精品嫩草影院一区二区| 色综合老司机第九色激情| 91免费福利视频| 4438全国成人免费| 亚洲精品欧美日韩专区| 国内精品久久久| 欧美精品aaa| 亚洲自拍欧美另类| 日韩欧美aⅴ综合网站发布| 国产日韩在线播放| 国产精品99久久久久久www| 亚洲日韩欧美视频一区| 欧美专区中文字幕| 亚洲社区在线观看| 538国产精品一区二区免费视频| 在线视频国产日韩| 午夜精品福利电影| 国产欧美 在线欧美| www高清在线视频日韩欧美| 欧美夫妻性生活视频| 欧美精品免费在线| 欧美日韩ab片| 亚洲欧美精品在线| 久久人人看视频| 成人免费在线视频网站| 中文字幕成人在线| 国产精品99蜜臀久久不卡二区| 日韩中文字幕视频在线观看| 亚洲欧美精品suv| 午夜欧美不卡精品aaaaa| 久久久久99精品久久久久| xx视频.9999.com| 久久国产天堂福利天堂| 成人h视频在线| 色综合久久中文字幕综合网小说| 欧美成年人网站| 色先锋资源久久综合5566| 国产精品亚洲аv天堂网| 亚洲天堂第二页| 成人自拍性视频| 国产精品成人在线| 日韩av在线播放资源| 国产一区二区三区欧美| 亚洲影院在线看| 久久全球大尺度高清视频| 国产精品久久久久久久久免费看| 国产欧美久久久久久| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲国产精品人久久电影| 性金发美女69hd大尺寸| 欧美性色xo影院| 亚洲无线码在线一区观看| 一个人看的www欧美| 性欧美办公室18xxxxhd| 国产精品成熟老女人| 久久久www成人免费精品张筱雨| 日韩中文字幕免费| 91精品视频免费| 国产色视频一区| 91精品国产91久久久久久最新| 国产精品男女猛烈高潮激情| 国语自产在线不卡| 久久久久久久亚洲精品| 日韩午夜在线视频| 欧美日韩另类视频| 久久久免费精品视频| 国产视频精品免费播放| 亚洲国产天堂久久综合网| 91a在线视频| 成人在线视频福利| 成人在线一区二区| 欧美黑人xxx| 深夜成人在线观看| 国产精品天天狠天天看| 亚洲最大福利网站| 久久视频免费在线播放| 久久中文字幕在线| 亚洲女人天堂成人av在线| 日韩av电影在线网| 国产日韩欧美在线视频观看| 亚洲午夜未删减在线观看| 国产亚洲激情视频在线| 亚洲精品久久在线| 久久久女人电视剧免费播放下载| 欧美大肥婆大肥bbbbb| 欧美一区二区大胆人体摄影专业网站| 欧美夫妻性视频| 久久成人一区二区| 日韩激情在线视频| 久久精品久久久久电影| 午夜精品蜜臀一区二区三区免费|