我正在尝试为我的节点js函数编写一个装饰器。像
这样的东西'Test func a': custom_decorator( func(x)){
..
..
..
})
我想说我想在我的函数中添加域错误处理程序,我想将域错误处理抽象到我的所有函数中。
var d = domain.create().on('error', function(err) {
console.error(...);
});
d.enter();
"My function"
d.exit()
我想将错误处理移动到装饰器,以便函数编写者可以使用
调用它function_name : errorDecorator(fn)
答案 0 :(得分:3)
一个例子:
function sum(a, b) { return a + b; }
function logDecorator(fn) {
return function() {
console.log(arguments);
return fn.apply(this, arguments);
};
}
var sumLog = logDecorator(sum);
sumLog(1, 10); // returns 11 and logs { '0': 1, '1': 10 } to the console
sumLog(5, 4); // returns 9 and logs { '0': 5, '1': 4 } to the console
其中:
<强>更新强>
另一个使用try-catch的例子:
function div(a, b) {
if(b == 0)
throw new Error("Can't divide by zero.");
else
return a / b;
}
function logDecorator(fn) {
return function() {
try {
console.log(arguments);
return fn.apply(this, arguments);
} catch(e) {
console.error("An error occurred: " + e);
}
};
}
var divLog = logDecorator(div);
divLog(5, 2); // returns 2.5 and logs { '0': 5, '1': 2 } to the console
divLog(3, 0); // returns undefined, logs { '0': 3, '1': 0 }, and "An error occurred: Error: Can't divide by zero." to the console