bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Node.js中怎么實現(xiàn)串行化流程控制

本篇文章為大家展示了Node.js中怎么實現(xiàn)串行化流程控制,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

公司主營業(yè)務:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出青州免費做網(wǎng)站回饋大家。

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

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

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

數(shù)組中的每個任務都是一個函數(shù)。任務完成后應該調(diào)用一個處理器函數(shù),告訴它錯誤狀態(tài)和結(jié)果。

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

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

mkdir random_story
cd random_story
npm install request
npm install htmlparser

request模塊是個簡化的HTTP客戶端,可以獲取RSS數(shù)據(jù)。htmlparser模塊能夠把原始的RSS數(shù)據(jù)轉(zhuǎn)換成JavaScript數(shù)據(jù)結(jié)構(gòu)。

在新目錄下創(chuàng)建一個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]);
  });
}
//向預定源發(fā)送HTTP請求以獲取數(shù)據(jù)
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);
  });
}
//解析到一個條目數(shù)組中
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);
  }
}
//開始執(zhí)行串行化任務
next();

在試用這個程序之前,現(xiàn)在程序腳本所在的目錄下創(chuàng)建一個rss_feeds.txt文件。這里只包含了一條預定源信息:

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

之后執(zhí)行腳本:

node random_story.js

Node.js中怎么實現(xiàn)串行化流程控制

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

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

上述內(nèi)容就是Node.js中怎么實現(xiàn)串行化流程控制,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當前標題:Node.js中怎么實現(xiàn)串行化流程控制
文章URL:http://vcdvsql.cn/article36/gghhpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站手機網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、用戶體驗移動網(wǎng)站建設(shè)、網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化