English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
utilはNode.jsのコアモジュールであり、常用関数のセットを提供し、核心JavaScriptの機能が過度に簡略化されている不足を補います。
使用方法は以下の通りです:
const util = require('util');
util.callbackify(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); });
上記のコードの結果は以下の通りです:
hello world
コールバック関数は非同期に実行され、例外のスタックトレース追跡があります。コールバック関数が例外をスローした場合、プロセスは 'uncaughtException' 例外をトリガーし、未捕捉された場合、プロセスは終了します。
null はコールバック関数の引数として特別な意味を持っています。コールバック関数の最初の引数が Promise の拒否原因で値が存在し、その値がブール値 false に変換できる場合、その値は Error オブジェクトにエンキャップされ、reason 属性を通じて取得できます。
function fn() { return Promise.reject(null); } const callbackFunction = util.callbackify(fn); callbackFunction((err, ret) => { // Promise が `null` で拒否された場合、それは Error にラップされ、元の値は `reason` に保存されます。 err && err.hasOwnProperty('reason') && err.reason === null; // true });
original は async 非同期関数です。この関数は従来のコールバック関数を返します。
util.inherits(constructor, superConstructor) はオブジェクト間のプロトタイプ継承を実現する関数です。
JavaScript のオブジェクト指向はプロトタイプに基づいており、一般的なクラスに基づくものとは異なります。JavaScript にはオブジェクトの継承をサポートする言語レベルの特性はありませんが、プロトタイプコピーを通じて実現されます。
ここでは、util.inherits の使い方について紹介します。以下に例を示します:
var 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);
わたしたちは、Base という基本オブジェクトと、Base を継承する Sub を定義しました。Base には構築関数内で定義された属性が3つあり、プロトタイプで定義された関数が1つあります。util.inherits を使って継承を実現します。実行結果は以下の通りです:
base Hello base { name: 'base', base: 1991, sayHello: [Function] } sub { name: 'sub' }
注意:Sub は Base のプロトタイプに定義された関数を継承していますが、コンストラクタ内で作成された base プロパティや sayHello 関数は Sub に継承されていません。
また、プロトタイプに定義されたプロパティは console.log でオブジェクトのプロパティとして出力されません。objSub.sayHello(); この行のコメントを外した場合、以下のようになります:
node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ TypeError: Object #<Sub> has no method 'sayHello' at Object.<anonymous> (/home/byvoid/utilinherits.js:29:8) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40)
util.inspect(object,[showHidden],[depth],[colors]) は、任意のオブジェクトを文字列に変換するメソッドで、通常、デバッグやエラーハンドリングに使用されます。少なくとも 1 つのパラメータ object が必要で、変換するオブジェクトです。
showHidden はオプションのパラメータで、true に設定すると、より多くの隠された情報を出力します。
depth は最大再帰レベルを表し、オブジェクトが非常に複雑な場合、出力情報の量を制御するためにレベルを指定できます。depth を指定しない場合、デフォルトで再帰します。 2 レベルを指定する場合、null に設定するとオブジェクトを無制限の再帰レベルで完全に巡回します。colors 値が true の場合、ANSI カラーコーディングを使用して出力形式が変更され、通常、ターミナルでより美しい表示に使用されます。
特に指摘すべきは、util.inspect は単にオブジェクトを文字列に変換するだけでなく、toString メソッドが定義されていても直接呼び出しません。
var 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));
実行結果は:
Person { name: 'byvoid', toString: [Function] } Person { name: 'byvoid', toString: { [Function] [length]: 0, [name]: '', [arguments]: null, [caller]: null, [prototype]: { [constructor]: [Circular] } }
もし与えられた引数 "object" が配列であれば true を返し、そうでない場合は false を返します。
var util = require('util'); util.isArray([]) // true util.isArray(new Array) // true util.isArray({}) // false
もし与えられた引数 "object" が正規表現であれば true を返し、そうでない場合は false を返します。
var util = require('util'); util.isRegExp(/some regexp/) // true util.isRegExp(new RegExp('another regexp')) // true util.isRegExp({}) // false
もし与えられた引数 "object" が日付であれば true を返し、そうでない場合は false を返します。
var util = require('util'); util.isDate(new Date()) // true util.isDate(Date()) // false (without 'new' returns a String) util.isDate({}) // false
詳細情報はこちらからアクセスできます http://nodejs.org/api/util.html 詳細な内容を確認してください。