addCallListener 0.2
TypeScript
Function.addCallListener = function(func, callbacks) {
var successNumber = 0,
errorNumber = 0,
name = func.name;
return function() {
var args = [].slice.call(arguments);
var result, error;
var props = {
args: args,
self: this,
name: name
}
callbacks.before && callbacks.before(props);
try {
result = func.apply(this, arguments);
props.successNumber = ++successNumber;
props.result = result;
props.status = 'success';
callbacks.success && callbacks.success(props);
} catch (e) {
props.errorNumber = ++errorNumber;
props.error = e;
props.status = 'error';
callbacks.error && callbacks.error(props);
}
callbacks.after && callbacks.after(props);
return result;
}
}
f1 = function f1() {
throw new Error('bla')
}
f1 = Function.addCallListener(f1, {
before: function(props) {
console.log('before', props);
},
success: function(props) {
console.log('success', props);
},
after: function(props) {
console.log('after', props);
},
error: function(props) {
console.log('error', props);
}
});
f1(1, 2, 3, 4, 5, 6);
f2 = function f2() {
return 5;
}
f2 = Function.addCallListener(f2, {
before: function(props) {
console.log('before', props);
},
success: function(props) {
console.log('success', props);
},
after: function(props) {
console.log('after', props);
},
error: function(props) {
console.log('error', props);
}
});
f2(0, 9, 8, 7, 6, 5);
f2(0, 9, 8, 7, 6, 5);
f2(0, 9, 8, 7, 6, 5);