如何在Nodejs中为回调创建代理对象

时间:2014-09-30 11:02:40

标签: node.js proxy callback

现在我正在分析我的nodejs应用程序,以便找到每个方法调用和回调的持续时间。

我已经编写了一些代码来代理每个方法调用,如:

function addPerfProxyUnderPrototype(name, clazz) {
    var fn = clazz.prototype[name];
    clazz.prototype[name] = function () {
        // var newArgs = getProxyArgs(arguments);
        var s = new Date().getTime();
        // var result = fn.apply(this, newArgs);
        var result = fn.apply(this, arguments);
        var e = new Date().getTime();
        console.log('duration : ' + (e - s));
        return result;
    };
};

我可以通过这些代码获得方法调用的持续时间。您可能知道,在nodejs app中,参数包含回调函数。 nodejs app代码如:

var clazz = function(){
}   
clazz.prototype.send = function(callback){
    // do somthing
    callback(err, data);
}

我想为回调参数创建一个代理来获取持续时间。

function getProxyArgs(args) {
    var newArgs = [];
    for (var i = 0; i < args.length; i++) {
        var arg = args[i];
        if (typeof arg === 'function')) {
            newArgs.push(function () {
                var s = new Date().getTime();
                var result = arg.apply(undefined, arguments);
                var e = new Date().getTime();
                console.log('duration : ' + (e - s));
                return result;
            });
        } else {
            newArgs.push(arg);
        }
    }
    return newArgs;
};

以上代码将失去&#39;这个&#39;。知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

function getProxyArgs(args) {
    var newArgs = [];
    var self = this;
    for (var i = 0; i < args.length; i++) {
        var arg = args[i];
        if (typeof arg === 'function')) {
            newArgs.push(function () {
                var s = new Date().getTime();
                var result = arg.apply(self, arguments);
                var e = new Date().getTime();
                console.log('duration : ' + (e - s));
                return result;
            });
        } else {
            newArgs.push(arg);
        }
    }
    return newArgs;
};