javascript - JavaScript WebSocket 用新套接字替换引用
问题描述
我正在尝试使用函数自动重新连接 websocket。我希望它保持相同的变量名,但我遇到了一些问题。这是我正在使用的功能
function reconnect(obj){
try{
obj=new WebSocket(obj.url);
}
except{
setTimeout(reconnect,5000,obj);
}
}
mysocket=new Websocket(myurl);
mysocket.close()
reconnect(mysocket)
重新连接功能成功运行后但mysocket
仍引用旧的关闭Websocket
。我不确定如何将新Websocket
对象转移到旧变量。
解决方案
您正在覆盖变量。有多种方法可以做到这一点,最快的是传递一个对象。
function reconnect(obj){
var mySocket = obj.mySocket;
try {
obj.mySocket=new WebSocket(mySocket.url);
}
except {
setTimeout(reconnect, 5000, obj);
}
}
mysocket=new Websocket(myurl);
mysocket.close()
var wrapperObject = {mysocket};
reconnect(wrapperObject);
// At any point of time `wrapperObject.mysocket` will have the latest socket instance
一种更简洁的方法是定义一个私有class/function
范围的mySocket
变量的包装器。前任:
function ReconnectSocket (mySocket) {
this.mySocket = mySocket
}
ReconnectSocket.prototype.reconnect = function () {
try {
this.mySocket = new WebSocket(this.mySocket.url);
}
except {
setTimeout(reconnect, 5000);
}
}
ReconnectSocket.prototype.getSocket = function () {
return this.mySocket
}
var mysocket=new Websocket(myurl);
mysocket.close()
var reconnectSocket = new ReconnectSocket(mysocket).reconnect()
// `reconnectSocket.getSocket()` will give the latest instance at any point of time
推荐阅读
- android - 如何在android中以列表计数器的形式获取搜索结果
- abp - 尝试使用模块模板和 web.unified 主机示例时出错
- javascript - 为什么改变对象引用的值并不会真正改变对象?
- flutter - rxdart vanilla bloc中的Flutter debounce api调用
- amazon-web-services - 删除 SNS 主题,但前提是没有订阅者
- netlogo - 如何检查属于补丁的变量的值
- c - 真的很困惑像 fgets/scanf 这样的输入函数来分配一个结构指针到一个值
- python - 将具有两个参数的函数转换为只有一个参数
- javascript - 用于展平嵌套数组并跟踪所有父节点的递归函数(Javascript)
- python - 对列进行分组以获取其计数,同时保持所有其他列不变