node.jsでDomainを関数ごとに作ってエラーハンドリング
node.js Domain 時代のエラー処理のコーディングパターンで、node-v0.7.8でDomainという機能が入ったのを知りました。
これはいいですね! さっそく、自分好みの使い方を考えてみました。
それは、Domainを関数ごとに作る、というもの。こんな感じ。
var fs = require('fs'); var domain = require('domain'); function countChars(filename, callback) { var d = domain.create().on('error', function (err) { callback(err); // 呼び出し元にエラーを通知 }); fs.readFile(filename, 'utf-8', d.intercept(function (_, data) { callback(null, data.length); // 正常処理 })); } function main(args) { var d = domain.create().on('error', function (err) { console.error(err); }); countChars(args[0], d.intercept(function (_, length) { console.log(length); })); } main(['nonexistent']);
ポイント
- Domainを関数ごとに作る。エラーハンドリングも関数ごと。
- interceptすれば第一引数のエラーオブジェクトは渡ってこないけど、わかりやすさ優先でCallbackの第一引数はエラーオブジェクトで統一
関数の独立性が高まっていい感じ、じゃない?
ところで、interceptって文字数がちょっと長いですね。bindに負けず劣らずの短くていい名前があればいいんですけどねー。