nodejs 终端打印进度条实例代码


Posted in NodeJs onApril 22, 2017

1. 场景导入

当我们对大量文件进行批量处理的时候(例如:上传/下载、保存、编译等),常常希望知道当前进展如何,或者失败(成功)的任务有多少;当我们的代码或程序已经发布,用户在执行安装的过程中,一个合适的(终端/命令行)进度条可以准确反映安装的步骤和进程,提升程序的可用性,一定程度缓解用户在等待中的烦恼……

2. 基本原理

首先,在终端打印出文本是件比较容易的事情。那么使用简单的文本和符号,就够自己拼凑出命令行的效果(下面例子):

文件已上传: 43.60% ?????????????????????░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 150/344

当然,进度条的效果可以根据需要自己设计啦,我这里只是给大家一个参考。

这里,我将打印命令行的方法构造成一个工具模块 progress-bar.js,具体实现如下 :-)

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

// 封装的 ProgressBar 工具
function ProgressBar(description, bar_length){
 // 两个基本参数(属性)
 this.description = description || 'Progress';    // 命令行开头的文字信息
 this.length = bar_length || 25;           // 进度条的长度(单位:字符),默认设为 25

 // 刷新进度条图案、文字的方法
 this.render = function (opts){
  var percent = (opts.completed / opts.total).toFixed(4);  // 计算进度(子任务的 完成数 除以 总数)
  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);
 };
}

// 模块导出
module.exports = ProgressBar;

3. Run 起来

基于上面的实现,先说一下这个 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 一下上面的代码,执行效果如下:

nodejs 终端打印进度条实例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
浅谈nodejs中的类定义和继承的套路
Jul 26 NodeJs
详解nodeJs文件系统(fs)与流(stream)
Jan 24 NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
NVM安装nodejs的方法实用步骤
Jan 16 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
Nov 18 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
NodeJS模块Buffer原理及使用方法解析
Nov 11 NodeJs
详解如何在NodeJS项目中优雅的使用ES6
Apr 22 #NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 #NodeJs
解析NodeJS异步I/O的实现
Apr 13 #NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 #NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 #NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 #NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 #NodeJs
You might like
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
js中获取事件对象的方法小结
2011/03/13 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python中apply函数的用法实例教程
2014/07/31 Python
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python list元素为tuple时的排序方法
2018/04/18 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
商务日语专业毕业生求职信
2013/10/26 职场文书
工程业务员工作职责
2013/12/07 职场文书
学校端午节活动方案
2014/08/23 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书