1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Node.js中怎么實現(xiàn)串行化流程控制-創(chuàng)新互聯(lián)

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

      創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)紅塔,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

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

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

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

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

      為了演示如何實現(xiàn)串行化流程控制,我們準備做個小程序,讓它從一個隨機選擇的RSS預(yù)定源中獲取一篇文章的標題和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]);
        });
      }
      //向預(yù)定源發(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í)行串行化任務(wù)
      next();

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

      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)串行化流程控制,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


      分享標題:Node.js中怎么實現(xiàn)串行化流程控制-創(chuàng)新互聯(lián)
      網(wǎng)站網(wǎng)址:http://ef60e0e.cn/article/jhjjg.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        八宿县| 循化| 喜德县| 怀来县| 龙胜| 枣阳市| 徐水县| 永泰县| 扶余县| 湖南省| 宜春市| 江永县| 南木林县| 山阴县| 绥中县| 健康| 宜章县| 沂南县| 花莲县| 彭水| 龙陵县| 蕲春县| 石楼县| 喀什市| 泰顺县| 垦利县| 洛阳市| 南阳市| 定兴县| 都安| 秭归县| 盐边县| 保山市| 赤峰市| 金昌市| 马关县| 秦皇岛市| 北碚区| 昌宁县| 南溪县| 资阳市|