nodejs 終端打印進度條

1. 場景導(dǎo)入

當我們對大量文件進行批量處理的時候(例如:上傳/下載、保存、編譯等)宝恶,常常希望知道當前進展如何,或者失敗(成功)的任務(wù)有多少;當我們的代碼或程序已經(jīng)發(fā)布垫毙,用戶在執(zhí)行安裝的過程中霹疫,一個合適的(終端/命令行)進度條可以準確反映安裝的步驟和進程综芥,提升程序的可用性,一定程度緩解用戶在等待中的煩惱……

2. 基本原理

首先膀藐,在終端打印出文本是件比較容易的事情。
那么使用簡單的文本和符號额各,就夠自己拼湊出命令行的效果(下面例子):

文件已上傳: 43.60% █████████████████████????????????????????????????? 150/344

當然栏笆,進度條的效果可以根據(jù)需要自己設(shè)計啦,我這里只是給大家一個參考臊泰。

這里,我將打印命令行的方法構(gòu)造成一個工具模塊 progress-bar.js缸逃,具體實現(xiàn)如下 :-)

// 這里用到一個很實用的 npm 模塊,用以在同一行打印文本
var slog = require('single-line-log').stdout;

// 封裝的 ProgressBar 工具
function ProgressBar(description, bar_length){
  // 兩個基本參數(shù)(屬性)
  this.description = description || 'Progress';       // 命令行開頭的文字信息
  this.length = bar_length || 25;                     // 進度條的長度(單位:字符)需频,默認設(shè)為 25

  // 刷新進度條圖案丁眼、文字的方法
  this.render = function (opts){
    var percent = (opts.completed / opts.total).toFixed(4);    // 計算進度(子任務(wù)的 完成數(shù) 除以 總數(shù))
    var cell_num = Math.floor(percent * this.length);             // 計算需要多少個 █ 符號來拼湊圖案

    // 拼接黑色條
    var cell = '';
    for (var i=0;i<cell_num;i++) {
      cell += '█';
    }

    // 拼接灰色條
    var empty = '';
    for (var i=0;i<this.length-cell_num;i++) {
      empty += '?';
    }

    // 拼接最終文本
    var cmdText = this.description + ': ' + (100*percent).toFixed(2) + '% ' + cell + empty + ' ' + opts.completed + '/' + opts.total;
    
    // 在單行輸出文本
    slog(cmdText);
  };
}

// 模塊導(dǎo)出
module.exports = ProgressBar;

3. Run 起來

基于上面的實現(xiàn),先說一下這個 progress-bar.js 的用法:

// 引入工具模塊
var ProgressBar = require('./progress_bar');

// 初始化一個進度條長度為 50 的 ProgressBar 實例
var pb = new ProgressBar('下載進度', 50);

// 這里只是一個 pb 的使用示例昭殉,不包含任何功能
var num = 0, total = 200;
function downloading() {
  if (num <= total) {
    // 更新進度條
    pb.render({ completed: num, total: total });

    num++;
    setTimeout(function (){
      downloading();
    }, 500)
  }
}
downloading();

run 一下上面的代碼,執(zhí)行效果如下:

如有幫助挪丢,請看官記得點贊或者打賞下下 ( _ )
原創(chuàng)文章,轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠啄,一起剝皮案震驚了整個濱河市任内,隨后出現(xiàn)的幾起案子撵渡,更是在濱河造成了極大的恐慌死嗦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件越除,死亡現(xiàn)場離奇詭異靠欢,居然都是意外死亡铜跑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門掷空,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坦弟,你說我怎么就攤上這事官地∧鸢” “怎么了驱入?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長莺褒。 經(jīng)常有香客問我,道長遵岩,這世上最難降的妖魔是什么巡通? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宴凉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跪解。我一直安慰自己签孔,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布图仓。 她就那樣靜靜地躺著,像睡著了一般救崔。 火紅的嫁衣襯著肌膚如雪惶看。 梳的紋絲不亂的頭發(fā)上六孵,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音劫窒,去河邊找鬼。 笑死主巍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的逛艰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼散怖,長吁一口氣:“原來是場噩夢啊……” “哼肄渗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恳啥,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翁垂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沿猜,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡碗脊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了祈坠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赦拘,死狀恐怖芬沉,靈堂內(nèi)的尸體忽然破棺而出阁猜,到底是詐尸還是另有隱情,我是刑警寧澤剃袍,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布捎谨,位于F島的核電站,受9級特大地震影響侍芝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜州叠,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逆甜。 院中可真熱鬧,春花似錦交煞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怜珍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酥泛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工柔袁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歼秽。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓情组,卻偏偏與公主長得像燥筷,于是被迫代替她去往敵國和親院崇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫谢揪、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,138評論 25 707
  • 朱宇凱,這是我第二次寫日志寫日志關(guān)于生日茁肠。你之前老是鬧騰要我寫一篇滿滿是花言巧語的文章送你,我本來打算某個特別的日...
    憂傷的紫兔子閱讀 308評論 0 0
  • 關(guān)于作者 凱倫·伯格是美國溝通專家匹颤、演講大師、專業(yè)發(fā)言人印蓖。 關(guān)于本書 凱倫·伯格結(jié)合自己多年的研究經(jīng)驗,從大量真實...
    子曰葡萄閱讀 737評論 0 0
  • 書桌上赦肃,父親仔細的看著大學名冊,皺眉問道:“你覺得你可以考多少分呢摆尝?”我在一旁撇了撇嘴:“不知道《楣”“你估計一下嘛...
    白肥大叔兔閱讀 265評論 0 1