在处理程序之外传递对象引用,即使其全局化
Passing a object reference outside of handler, ie make it global
这更像是我假设的最佳实践问题,但在下文中,谁能告诉我如何将套接字对象的引用传递到它所在的方法处理程序之外?
io.on('connection', function (socket) {
console.log('connection '+socket);
//do stuff here
});//end callback handler
//need a reference to socket here!!
只是将其分配给该范围内定义的变量?
var globalSocket;
io.on('connection', function (socket) {
globalSocket = socket;
});
// now what?
但是,我认为没有理由这样做,因为在调用事件处理程序之前您将无法使用该值(您只知道何时调用事件处理程序)。
要解决这个问题,您需要将需要访问套接字的代码放在函数中,并从事件处理程序调用该函数:
var globalSocket;
io.on('connection', function (socket) {
globalSocket = socket;
doSomething();
});
function doSomething() {
// do something with globalSocket
console.log(globalSocket);
}
但是,将socket
作为参数传递给函数会更加优雅:
io.on('connection', function (socket) {
doSomething(socket);
});
function doSomething(socket) {
// do something with socket
console.log(socket);
}
好吧,您必须将其存储在某种套接字连接池中。但请记住,如果您想使用负载均衡器在多个进程/机器中分发,这将不能很好地工作。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- javascript无法重新定义函数内部的全局对象
- Javascript,从静态函数中打印全局对象
- 如何使用object.assign()从其他对象引用基本对象属性
- 返回 JavaScript 类值而不是对象引用
- Facebook:当发布期望对象引用时显示打开的图形对话框
- Javascript-如何从字符串/对象引用回调
- 将其用于对象引用
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 将对象函数传递给请求动画帧时丢失对象引用
- JavaScript ecma6中的对象引用
- 在处理程序之外传递对象引用,即使其全局化
- 引用错误和全局对象
- 以严格模式在未知环境中获取对全局对象的引用
- Javascript硬编码对象可以作为参数,但不能引用全局对象
- 如何存储对具有角度的对象或全局对象的引用
- 将全局对象存储到数组中只是创建对这些对象的引用吗
- JavaScript全局对象引用与'这'