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极简入门教程(二):定时器
Oct 25 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
nodejs开发——express路由与中间件
Mar 24 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
使用nodeJs来安装less及编译less文件为css文件的方法
Nov 20 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
Nodejs让异步变成同步的方法
Mar 02 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 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 fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
PHP时间类完整代码实例
2021/02/26 PHP
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
详解Vite的新体验
2021/02/22 Javascript
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
Windows下python3.7安装教程
2018/07/31 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
python实现简单银行管理系统
2019/10/25 Python
英语系本科生个人求职信
2013/09/21 职场文书
高中生的自我评价
2014/03/04 职场文书
给学校的建议书范文
2014/05/15 职场文书
正规欠条模板
2015/07/03 职场文书
python必学知识之文件操作(建议收藏)
2021/05/30 Python
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python