zoukankan      html  css  js  c++  java
  • 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('程序执行结束');
  • 相关阅读:
    JS中级二
    JS中级一
    JS入门八
    JS入门七
    JS入门六
    JS入门五
    JS入门四
    JS入门三
    JS入门二
    JS入门1
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14200119.html
Copyright © 2011-2022 走看看