異步函數(shù)的串行執(zhí)行流程

w.png

/**

* 實現(xiàn)串行化流程控制

*

*/

const fs = require('fs')

const request = require('request')

const htmlparser = require('htmlparser')

const configFileName = './rss_feeds.txt'

//檢查文件是否存在,確保文件沒問題.

function checkForRSSFile(){

    fs.exists(configFileName,(err,exist)=>{

        if(!exist){

            return next(new Error(`missing RSS file ${configFileName}`))

        }

        next(null,configFileName)

    })

}

//讀取文件內(nèi)容

function readRSSFile(configFileName){

    fs.readFile(configFileName,(err,feedList)=>{

        if(err){

            next(err)

            return

        }

        feedList = feedList.toString()

                    .replace(/^\s+|\s+$/g,'')

                    .split('\n')

        let random = Math.floor(Math.random() * feedList.length)

        next(null,feedList[random])           

    })

}

function downloadRSSFeed(feedUrl){

    request({url:feedUrl},(err,response,body) =>{

        if(err) next(err)

        if(response.statusCode != 200){

            return next(new Error('abnormal response status code.'))

        }

        next(null,body)

    })

}

var tasts = [

    checkForRSSFile,

    readRSSFile,

    downloadRSSFeed

]

function next(err,result){

    if(err) throw err //往上拋出異常

    let currentTask = tasts.shift() //返回數(shù)組一個元素,并且刪除

    if(currentTask){ //如果判斷函數(shù)存在

        currentTask(result) //執(zhí)行函數(shù)

    }

}

next() //開始執(zhí)行當前任務

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容