1

我正在为 Websocket 连接构建时间测量。我需要将开放范围绑定到服务器对象。但我也有 time1,这是从开始到完成连接的时间。我想将 time1 放到对象中,它工作正常,但我在绑定函数中没有任何访问权限。

for(var i = 0; i < 10; i++) {
    Server[i] = new WebSocket('ws://127.0.0.1:9300');
    var time1 = new Date;
    Server[i].time1 = time1;

    Server[i].bind('open', function() {
                        var time2 = new Date;
                        /*** doesn't work ***/
                        console.log(time2 - this.time1);
                        /*** doesn't work ***/
                        console.log(time2 - Server[i].time1)
                        /***  ***/
    });
}

这两种方法我都试过了,都不行。我知道绑定中的 this 是不同的,但是有人可以告诉我一种方法来确保每次 1 到每个服务器 [i] 对象,然后在此绑定方法中访问它吗?

谢谢!

更新*

您能否告诉我如何更改此功能以使其正常工作

this.conn.onopen = function(){dispatch('open',null)}

    var dispatch = function(event_name, message){
        var chain = callbacks[event_name];
        if(typeof chain == 'undefined') return; // no callbacks for this event
        for(var i = 0; i < chain.length; i++){
            chain[i]( message )
        }
    }
4

1 回答 1

2

你必须关闭i像这样的值:

Server[i].bind('open', function(i) {
    return function() {
      var time2 = new Date;
      console.log(time2 - Server[i].time1)
    }
}(i));

否则,您的所有函数都会继续引用相同的变量。

于 2013-03-06T09:53:10.673 回答