【經(jīng)驗心得】怎么使用 better-queue 管理復(fù)雜的任務(wù)

隊列,在數(shù)據(jù)結(jié)構(gòu)中是一種線性表,其特性為必須從一端插入,然后從另一端刪除數(shù)據(jù)。但筆者今天重點不是如何實現(xiàn)該數(shù)據(jù)結(jié)構(gòu),我們可以看一看如何借助隊列管理復(fù)雜的任務(wù)。

隊列在實際開發(fā)中應(yīng)用的場景非常廣泛。因為在一個復(fù)雜的系統(tǒng)中,總是會有一些非常耗時的處理。在這種時候開發(fā)者不能要求系統(tǒng)提供實時處理、實時響應(yīng)的能力。這時候我們就可以通過隊列來解決此類問題。

開發(fā)者可以不停地往隊列塞入數(shù)據(jù),并為其生成唯一值(進(jìn)行跟蹤),同時根據(jù)當(dāng)前系統(tǒng)的處理能力不斷的從隊列取出數(shù)據(jù)進(jìn)行業(yè)務(wù)處理,以此來減輕在同一時間內(nèi)進(jìn)行大量復(fù)雜業(yè)務(wù)處理,以便增強(qiáng)系統(tǒng)的處理能力。

服務(wù)端通??梢越柚犃衼磉M(jìn)行異步處理、系統(tǒng)解耦、數(shù)據(jù)同步以及流量削峰。

使用方法

讓我們開始看一看 better-queue 如何使用。

代碼風(fēng)格

import BetterQueue from "better-queue";

// 創(chuàng)建隊列并且提供任務(wù)處理的回調(diào)函數(shù)

// 當(dāng)調(diào)用回調(diào)意味該數(shù)據(jù)已經(jīng)從隊列中刪除

// 然后從隊列中取出下一條數(shù)據(jù)繼續(xù)處理

const q = new BetterQueue(function (input, cb) {

? // 從隊列中取出數(shù)據(jù)并進(jìn)行處理...

? const result = 'xxxx'

? try {

? ? // 如果成功則調(diào)用回調(diào)并且返回結(jié)果

? ? cb(null, result);

? } catch (err) {

? ? // 否則返回錯誤

? ? cb(err)

? }

})

q.push(1)

q.push({x: 1})

我們可以看到,該庫的代碼風(fēng)格還是采用了 Node 早期版本的回調(diào)風(fēng)格,如果在執(zhí)行期間發(fā)生了錯誤,會把錯誤作為回調(diào)的第一個參數(shù)傳遞到回調(diào)函數(shù)中。類似于:

fs.readFile(filePath, (err, data) => {

? if (err) {

? ? console.log(err)

? ? return

? }

? console.log(data)

})

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

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

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