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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
14款NodeJS Web框架推荐
Jul 11 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
Windows系统中安装nodejs图文教程
Feb 28 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
nodejs基础应用
Feb 03 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
Sep 29 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 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+MYSQL的文章管理系统(二)
2006/10/09 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
2014/05/15 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
angularjs指令之绑定策略(@、=、&amp;)
2017/04/13 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
Python生成pdf文件的方法
2014/08/04 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
python 读取修改pcap包的例子
2019/07/23 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
在keras里实现自定义上采样层
2020/06/28 Python
python 如何停止一个死循环的线程
2020/11/24 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
数控个人求职信范文
2014/02/03 职场文书
中学生自我评价2015
2015/03/03 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
asyncio异步编程之Task对象详解
2022/03/13 Python