Node.js 常用工具

Node.js 常用工具

参考https://www.runoob.com/nodejs/nodejs-util.html

  • util是Node.js的一个核心模块,顾名思义是工具的意思。

使用方法

  const util = require('util')

uitl.callbackify

uitl.callbackify(original)将async异步函数(或返回值为Promise的函数)转换为遵循异常优先回调风格的函数。
original是一个async异步函数或返回值为Promise的函数。

例如将(err, value)=>{}回调作为最后一个参数。

在回调函数中,

  • 第一个参数为拒绝的原因(如果Promise解决,则为null),
  • 第二个参数是接受的值。

如果是:

const util = require('util');

async function fn(){
	return 'hello world!';
}

// const callbackFunction = util.callbackify(fn);

// callbackFunction((err, ret)=>{
// 	if(err) throw err;
// 	console.log(ret);
// });
console.log(fn());
console.log('程序执行结束');

结果:

  Promise { 'hello world!' }
  程序执行结束

如果是:

const util = require('util');

async function fn(){
	return 'hello world!';
}

const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret)=>{
	if(err) throw err;
	console.log(ret);
});
// console.log(fn());
console.log('程序执行结束')

结果:

  程序执行结束
  hello world!
  • 回调函数是异步执行的,并且有异常堆栈错误追踪。如果回调函数抛出一个异常,进程则会触发一个'uncaughtException'异常,如果这个进程的异常没有被捕获进程将会退出。
  • null在回调函数中作为一个参数具有特殊的意义,如果回调函数的第一个参数为Promise拒绝的原因且带有返回值,且该返回值可以转换为布尔值false,这个值会被封装在Error对象里,并通过属性reason获取。
const util = require('util');

function fn(){
	return Promise.reject(null);
}

const callbackFunction = util.callbackify(fn);
callbackFunction((err, ret)=>{
	// 当Promise以‘null’拒绝时,它被包装为Error且原始值储存在‘reason’中
	console.log(err && err.hasOwnProperty('reason') && err.reason===null); // true
});

console.log('程序执行结束');

结果:

  程序执行结束
  true

util.inherits

util.inherits(constructor, superConstructor)是一个实现对象间原型继承的函数。

  • JavaScript的面向对象是基于原型的,与常见的基于类的不同;
  • JavaScript只能通过原型复制实现对象继承。
    用法:
const util = require('util');

function Base(){
	this.name = 'base';
	this.base = 1991;
	this.sayHello = function(){
		console.log('Hello'+this.name);
	};
}
// 在原型中定义方法
Base.prototype.showName = function(){
	console.log(this.name);
};

function Sub(){
	this.name = 'sub';
}

util.inherits(Sub, Base);
var objBase = new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);

var objSub = new Sub();
objSub.showName();
// objSub.sayHello();
console.log(objSub);

console.log('程序执行结束');

结果:

  base
  Hellobase
  Base { name: 'base', base: 1991, sayHello: [Function (anonymous)] }
  sub
  Sub { name: 'sub' }
  程序执行结束

注意到Sub仅仅继承了Base在原型(prototype)中定义的方法,而sayHello()并未继承

util.inspect

语法

util.inspect(object, [showHidden], [depth], [colors])是一个将任意对象转换为字符串的方法,通常用于调试和错误输出。

  • 至少接受一个参数object,即要转换的对象;
  • showHidden默认为false,是否输出更多的隐藏信息;
  • depth表示最大递归的层数,默认为2,指定层数可以控制输出信息的多少,null表示不限制层数;
  • colors默认为false,如果为true则以ANSI颜色编码,在终端显示更漂亮的效果。
    util.inspect()并不是简单地调用toString()方法。
const util = require('util');

function Person(){
	this.name = 'byvoid';
	this.toString = function(){
		return this.name;
	};
}

var obj = new Person();
console.log(util.inspect(obj));
console.log(util.inspect(obj, true));

console.log('程序执行结束');

结果:

  Person { name: 'byvoid', toString: [Function (anonymous)] }
  Person {
    name: 'byvoid',
    toString: <ref *1> [Function (anonymous)] {
      [length]: 0,
      [name]: '',
      [arguments]: null,
      [caller]: null,
      [prototype]: { [constructor]: [Circular *1] }
    }
  }
  程序执行结束

util.isArray(object)

返回值true/false。

const util = require('util');

util.isArray([])
	// true
util.isArray(new Array)
	// true
util.isArray({})
	// false

console.log('程序执行结束');

util.isRegExp(object)

返回值true/false

const util = require('util');

util.isRegExp(/some regexp/)
	// true
util.isRegExp(new RegExp('another regexp'))
	// true
util.isRegExp({})
	// false

console.log('程序执行结束');

util.isDate(object)

返回值true/false

const util = require('util');

util.isDate(new Date())
	// true
util.isDate(Date())
	// false (without 'new' returns a String)
util.isDate({})
	// false

console.log('程序执行结束');
原文地址:https://www.cnblogs.com/pangqianjin/p/14200119.html